Flexible DMA descriptor support

ABSTRACT

A method of processing DMA operations includes providing a DMA descriptor, with the DMA descriptor including a reload field therein. The DMA descriptor is then processed, and a location of a next DMA descriptor is identified based upon a condition of the reload field.

REFERENCE TO RELATED APPLICATIONS

This application is a division of application Ser. No. 09/618,115 filedJul. 17, 2000, now U.S. Pat. No. 6,842,457, which is a CIP of U.S.patent application Ser. No. 09/343,409 filed Jun. 30, 1999, now U.S.Pat. No. 6,335,932, which claims priority of U.S. Provisional PatentApplications Ser. No. 60/135,216, filed on May 21, 1999, Ser. No.60/141,496, filed on Jun. 28, 1999, Ser. No. 60/155,106, filed on Sep.22, 1999, and Ser. No. 60/183,145, filed on Feb. 17, 2000. The contentsof these provisional applications is hereby incorporated by reference.Furthermore, this application is filed as a continuation-in-part of U.S.patent application Ser. No. 09/343,409, filed on Jun. 30, 1999.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The invention relates to a method and apparatus for high performanceswitching in local area communications networks such as token ring, ATM,ethernet, fast ethernet, and gigabit ethernet environments, generallyknown as LANs. In particular, the invention relates to a new switchingarchitecture in an integrated, modular, single chip solution, which canbe implemented on a semiconductor substrate such as a silicon chip.

2. Description of the Related Art

As computer performance has increased in recent years, the demands oncomputer networks has significantly increased; faster computerprocessors and higher memory capabilities need networks with highbandwidth capabilities to enable high speed transfer of significantamounts of data. The well-known ethernet technology, which is based uponnumerous IEEE ethernet standards, is one example of computer networkingtechnology which has been able to be modified and improved to remain aviable computing technology. A more complete discussion of prior artnetworking systems can be found, for example, in SWITCHED AND FASTETHERNET, by Breyer and Riley (Ziff-Davis, 1996), and numerous IEEEpublications relating to IEEE 802 standards. Based upon the Open SystemsInterconnect (OSI) 7-layer reference model, network capabilities havegrown through the development of repeaters, bridges, routers, and, morerecently, “switches”, which operate with various types of communicationmedia. Thickwire, thinwire, twisted pair, and optical fiber are examplesof media which has been used for computer networks. Switches, as theyrelate to computer networking and to ethernet, are hardware-baseddevices which control the flow of data packets or cells based upondestination address information which is available in each packet. Aproperly designed and implemented switch should be capable of receivinga packet and switching the packet to an appropriate output port at whatis referred to wirespeed or linespeed, which is the maximum speedcapability of the particular network. Basic ethernet wirespeed is up to10 megabits per second, and Fast Ethernet is up to 100 megabits persecond. The newest ethernet is referred to as gigabit ethernet, and iscapable of transmitting data over a network at a rate of up to 1,000megabits per second. As speed has increased, design constraints anddesign requirements have become more and more complex with respect tofollowing appropriate design and protocol rules and providing a lowcost, commercially viable solution. For example, high speed switchingrequires high speed memory to provide appropriate buffering of packetdata; conventional Dynamic Random Access Memory (DRAM) is relativelyslow, and requires hardware-driven refresh. The speed of DRAMs,therefore, as buffer memory in network switching, results in valuabletime being lost, and it becomes almost impossible to operate the switchor the network at linespeed. Furthermore, external CPU involvementshould be avoided, since CPU involvement also makes it almost impossibleto operate the switch at linespeed. Additionally, as network switcheshave become more and more complicated with respect to requiring rulestables and memory control, a complex multi-chip solution is necessarywhich requires logic circuitry, sometimes referred to as glue logiccircuitry, to enable the various chips to communicate with each other.Additionally, cost/benefit tradeoffs are necessary with respect toexpensive but fast SRAMs versus inexpensive but slow DRAMs.Additionally, DRAMs, by virtue of their dynamic nature, requirerefreshing of the memory contents in order to prevent losses thereof.SRAMs do not suffer from the refresh requirement, and have reducedoperational overhead which compared to DRAMs such as elimination of pagemisses, etc. Although DRAMs have adequate speed when accessing locationson the same page, speed is reduced when other pages must be accessed.

Referring to the OSI 7-layer reference model discussed previously, andillustrated in FIG. 7, the higher layers typically have moreinformation. Various types of products are available for performingswitching-related functions at various levels of the OSI model. Hubs orrepeaters operate at layer one, and essentially copy and “broadcast”incoming data to a plurality of spokes of the hub. Layer twoswitching-related devices are typically referred to as multiportbridges, and are capable of bridging two separate networks. Bridges canbuild a table of forwarding rules based upon which MAC (media accesscontroller) addresses exist on which ports of the bridge, and passpackets which are destined for an address which is located on anopposite side of the bridge. Bridges typically utilize what is known asthe “spanning tree” algorithm to eliminate potential data loops; a dataloop is a situation wherein a packet endlessly loops in a networklooking for a particular address. The spanning tree algorithm defines aprotocol for preventing data loops. Layer three switches, sometimesreferred to as routers, can forward packets based upon the destinationnetwork address. Layer three switches are capable of learning addressesand maintaining tables thereof which correspond to port mappings.Processing speed for layer three switches can be improved by utilizingspecialized high performance hardware, and off loading the host CPU sothat instruction decisions do not delay packet forwarding.

SUMMARY OF THE INVENTION

The invention includes, therefore, a method of processing DMAoperations, comprising the steps of providing a DMA descriptor, with thedescriptor including a reload field therein. The DMA descriptor is thenprocessed, and a location of a next DMA descriptor is identified basedupon a condition of the reload field.

Another embodiment of the invention is a method of processing DMAdescriptors, comprising the steps of checking a predetermined field in afirst DMA descriptor, then processing a next DMA descriptor at anaddress location which is determined based upon a condition of thepredetermined field.

The invention is also directed to a method of handling packets in anetwork switch, with the invention including the steps of inserting astack-specific tag into an incoming packet, then processing the packetin a stack of network switches in accordance with tag information in thestack-specific tag. A DMA operation is then performed within the networkswitch, with the DMA operation pertaining to packet handling within thenetwork switch.

The invention is also directed, therefore, to a network switch forhandling packets, with the network switch comprising a DMA unitcontaining DMA descriptor information therein, with the DMA descriptorinformation including a reload field. A DMA processing unit processesthe DMA descriptor information. The processing unit identifies alocation of a next DMA descriptor based upon a condition of the reloadfield.

The invention also includes a network switch for handling packets, withthe network switch including a tag insertion unit for inserting astack-specific tag into a packet, and a processing unit for processingthe packet in a stack of network switches in accordance with taginformation in the stack-specific tag. A removing unit removes thestack-specific tag from the packet when the packet is being switched toa destination port. A DMA unit is provided, containing DMA descriptorinformation therein. The DMA descriptor information includes a reloadfield. A DMA processing unit processes the DMA descriptor, andidentifies a location of a next DMA descriptor based upon a condition ofthe reload field.

BRIEF DESCRIPTION OF THE DRAWINGS

The objects and features of the invention will be more readilyunderstood with reference to the following description and the attacheddrawings, wherein:

FIG. 1 is a general block diagram of elements of the present invention;

FIG. 2 is a more detailed block diagram of a network switch according tothe present invention;

FIG. 3 illustrates the data flow on the CPS channel of a network switchaccording to the present invention;

FIG. 4A illustrates demand priority round robin arbitration for accessto the C-channel of the network switch;

FIG. 4B illustrates access to the C-channel based upon the round robinarbitration illustrated in FIG. 4A;

FIG. 5 illustrates P-channel message types;

FIG. 6 illustrates a message format for S channel message types;

FIG. 7 is an illustration of the OSI 7 layer reference model;

FIG. 8 illustrates an operational diagram of an EPIC module;

FIG. 9 illustrates the slicing of a data packet on the ingress to anEPIC module;

FIG. 10 is a detailed view of elements of the PMMU;

FIG. 11 illustrates the CBM cell format;

FIG. 12 illustrates an internal/external memory admission flow chart;

FIG. 13 illustrates a block diagram of an egress manager 76 illustratedin FIG. 10;

FIG. 14 illustrates more details of an EPIC module;

FIG. 15 is a block diagram of a fast filtering processor (FFP);

FIG. 16 is a block diagram of the elements of CMIC 40;

FIG. 17 illustrates a series of steps which are used to program an FFP;

FIG. 18 is a flow chart illustrating the aging process for ARL (L2) andL3 tables;

FIG. 19 illustrates communication using a trunk group according to thepresent invention;

FIG. 20 illustrates a generic stacking configuration for networkswitches;

FIG. 21 illustrates a first embodiment of a stacking configuration fornetwork switches;

FIG. 22 illustrates a second embodiment of a stacking configuration fornetwork switches;

FIG. 23 illustrates a third embodiment of a stacking configuration fornetwork switches;

FIG. 24A illustrates a packet having an IS tag inserted therein;

FIG. 24B illustrates the specific fields of the IS tag;

FIG. 25 illustrates address learning in a stacking configuration asillustrated in FIG. 20;

FIG. 26 illustrates address learning similar to FIG. 25, but with atrunking configuration;

FIGS. 27A-27D illustrate ARL tables after addresses have been learned;

FIG. 28 illustrates another trunking configuration;

FIG. 29 illustrates the handling of SNMP packets utilizing a central CPUand local CPUs;

FIG. 30 illustrates address learning in a duplex configuration asillustrated in FIGS. 22 and 23;

FIG. 31 illustrates address learning in a duplex configuration utilizingtrunking;

FIGS. 32A-32D illustrate ARL tables after address learning in a duplexconfiguration;

FIG. 33 illustrates a second trunking configuration relating to addresslearning;

FIGS. 34A-34D illustrate ARL tables after address learning;

FIG. 35 illustrates multiple VLANs in a stack;

FIG. 36 illustrates an example of trunk group table initialization forthe trunking configuration of FIG. 31;

FIG. 37 illustrates an example of trunk group table initialization forthe trunking configuration of FIG. 33;

FIG. 38 illustrates a block diagram of SOC 10 communicating with a CPUand with system memory;

FIG. 39 illustrates a sequential DMA descriptor configuration; and

FIG. 40 illustrates a DMA descriptor processing method according to thepresent invention.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

FIG. 1 illustrates a configuration wherein a switch-on-chip (SOC) 10, inaccordance with the present invention, is functionally connected toexternal devices 11, external memory 12, fast ethernet ports 13, andgigabit ethernet ports 15. For the purposes of this embodiment, fastethernet ports 13 will be considered low speed ethernet ports, sincethey are capable of operating at speeds ranging from 10 Mbps to 100Mbps, while the gigabit ethernet ports 15, which are high speed ethernetports, are capable of operating at 1000 Mbps. External devices 11 couldinclude other switching devices for expanding switching capabilities, orother devices as may be required by a particular application. Externalmemory 12 is additional off-chip memory, which is in addition tointernal memory which is located on SOC 10, as will be discussed below.CPU 52 can be used as necessary to program SOC 10 with rules which areappropriate to control packet processing. However, once SOC 10 isappropriately programmed or configured, SOC 10 operates, as much aspossible, in a free running manner without communicating with CPU 52.Because CPU 52 does not control every aspect of the operation of SOC 10,CPU 52 performance requirements, at least with respect to SOC 10, arefairly low. A less powerful and therefore less expensive CPU 52 cantherefore be used when compared to known network switches. As also willbe discussed below, SOC 10 utilizes external memory 12 in an efficientmanner so that the cost and performance requirements of memory 12 can bereduced. Internal memory on SOC 10, as will be discussed below, is alsoconfigured to maximize switching throughput and minimize costs.

It should be noted that any number of fast ethernet ports 13 and gigabitethernet ports 15 can be provided. In one embodiment, a maximum of 24fast ethernet ports 13 and 2 gigabit ports 15 can be provided.Similarly, additional interconnect links to additional external devices11, external memory 12, and CPUs 52 may be provided as necessary.

FIG. 2 illustrates a more detailed block diagram of the functionalelements of SOC 10. As evident from FIG. 2 and as noted above, SOC 10includes a plurality of modular systems on-chip, with each modularsystem, although being on the same chip, being functionally separatefrom other modular systems. Therefore, each module can efficientlyoperate in parallel with other modules, and this configuration enables asignificant amount of freedom in updating and re-engineering SOC 10.

SOC 10 includes a plurality of Ethernet Port Interface Controllers(EPIC) 20 a, 20 b, 20 c, etc., a plurality of Gigabit Port InterfaceControllers (GPIC) 30 a, 30 b, etc., a CPU Management InterfaceController (CMIC) 40, a Common Buffer Memory Pool (CBP) 50, a PipelinedMemory Management Unit (PMMU) 70, including a Common Buffer Manager(CBM) 71, and a system-wide bus structure referred to as CPS channel 80.The PMMU 70 communicates with external memory 12, which includes aGlobal Buffer Memory Pool (GBP) 60. The CPS channel 80 comprises Cchannel 81, P channel 82, and S channel 83. The CPS channel is alsoreferred to as the Cell Protocol Sideband Channel, and is a 17 Gbpschannel which glues or interconnects the various modules together. Asalso illustrated in FIG. 2, other high speed interconnects can beprovided, as shown as an extendible high speed interconnect. In oneembodiment of the invention, this interconnect can be in the form of aninterconnect port interface controller (IPIC) 90, which is capable ofinterfacing CPS channel 80 to external devices 11 through an extendiblehigh speed interconnect link. As will be discussed below, each EPIC 20a, 20 b, and 20 c, generally referred to as EPIC 20, and GPIC 30 a and30 b, generally referred to as GPIC 30, are closely interrelated withappropriate address resolution logic and layer three switching tables 21a, 21 b, 21 c, 31 a, 31 b, rules tables 22 a, 22 b, 22 c, 31 a, 31 b,and VLAN tables 23 a, 23 b, 23 c, 31 a, 31 b. These tables will begenerally referred to as 21, 31, 22, 32, 23, 33, respectively. Thesetables, like other tables on SOC 10, are implemented in silicon astwo-dimensional arrays.

In a preferred embodiment of the invention, each EPIC 20 supports 8 fastethernet ports 13, and switches packets to and/or from these ports asmay be appropriate. The ports, therefore, are connected to the networkmedium (coaxial, twisted pair, fiber, etc.) using known media connectiontechnology, and communicates with the CPS channel 80 on the other sidethereof. The interface of each EPIC 20 to the network medium can beprovided through a Reduced Media Internal Interface (RMII), whichenables the direct medium connection to SOC 10. As is known in the art,auto-negotiation is an aspect of fast ethernet, wherein the network iscapable of negotiating a highest communication speed between a sourceand a destination based on the capabilities of the respective devices.The communication speed can vary, as noted previously, between 10 Mbpsand 100 Mbps; auto-negotiation capability, therefore, is built directlyinto each EPIC module. The address resolution logic (ARL) and layerthree tables (ARL/L3) 21 a, 21 b, 21 c, rules table 22 a, 22 b, 22 c,and VLAN tables 23 a, 23 b, and 23 c are configured to be part of orinterface with the associated EPIC in an efficient and expedient manner,also to support wirespeed packet flow.

Each EPIC 20 has separate ingress and egress functions. On the ingressside, self-initiated and CPU-initiated learning of level 2 addressinformation can occur. Address resolution logic (ARL) is utilized toassist in this task. Address aging is built in as a feature, in order toeliminate the storage of address information which is no longer valid oruseful. The EPIC also carries out layer 2 mirroring. A fast filteringprocessor (FFP) 141 (see FIG. 14) is incorporated into the EPIC, inorder to accelerate packet forwarding and enhance packet flow. Theingress side of each EPIC and GPIC, illustrated in FIG. 8 as ingresssubmodule 14, has a significant amount of complexity to be able toproperly process a significant number of different types of packetswhich may come in to the port, for linespeed buffering and thenappropriate transfer to the egress. Functionally, each port on eachmodule of SOC 10 has a separate ingress submodule 14 associatedtherewith. From an implementation perspective, however, in order tominimize the amount of hardware implemented on the single-chip SOC 10,common hardware elements in the silicon will be used to implement aplurality of ingress submodules on each particular module. Theconfiguration of SOC 10 discussed herein enables concurrent lookups andfiltering, and therefore, processing of up to 6.6 million packets persecond. Layer two lookups, Layer three lookups and filtering occursimultaneously to achieve this level of performance. On the egress side,the EPIC is capable of supporting packet polling based either as anegress management or class of service (COS) function.Rerouting/scheduling of packets to be transmitted can occur, as well ashead-of-line (HOL) blocking notification, packet aging, cell reassembly,and other functions associated with ethernet port interface.

Each GPIC 30 is similar to each EPIC 20, but supports only one gigabitethernet port, and utilizes a port-specific ARL table, rather thanutilizing an ARL table which is shared with any other ports.Additionally, instead of an RMII, each GPIC port interfaces to thenetwork medium utilizing a gigabit media independent interface (GMII).

CMIC 40 acts as a gateway between the SOC 10 and the host CPU. Thecommunication can be, for example, along a PCI bus, or other acceptablecommunications bus. CMIC 40 can provide sequential direct mappedaccesses between the host CPU 52 and the SOC 10. CPU 52, through theCMIC 40, will be able to access numerous resources on SOC 10, includingMIB counters, programmable registers, status and control registers,configuration registers, ARL tables, port-based VLAN tables, IEEE 802.1qVLAN tables, layer three tables, rules tables, CBP address and datamemory, as well as GBP address and data memory. Optionally, the CMIC 40can include DMA support, DMA chaining and scatter-gather, as well asmaster and target PCI64.

Common buffer memory pool or CBP 50 can be considered to be the on-chipdata memory. In one embodiment of the invention, the CBP 50 is firstlevel high speed SRAM memory, to maximize performance and minimizehardware overhead requirements. The CBP can have a size of, for example,720 kilobytes running at 132 MHZ. Packets stored in the CBP 50 aretypically stored as cells, rather than packets. As illustrated in thefigure, PMMU 70 also contains the Common Buffer Manager (CBM) 71thereupon. CBM 71 handles queue management, and is responsible forassigning cell pointers to incoming cells, as well as assigning commonpacket IDs (CPID) once the packet is fully written into the CBP. CBM 71can also handle management of the on-chip free address pointer pool,control actual data transfers to and from the data pool, and providememory budget management.

Global memory buffer pool or GBP 60 acts as a second level memory, andcan be located on-chip or off chip. In the preferred embodiment, GBP 60is located off chip with respect to SOC 10. When located off-chip, GBP60 is considered to be a part of or all of external memory 12. As asecond level memory, the GBP does not need to be expensive high speedSRAMs, and can be a slower less expensive memory such as DRAM. The GBPis tightly coupled to the PMMU 70, and operates like the CBP in thatpackets are stored as cells. For broadcast and multicast messages, onlyone copy of the packet is stored in GBP 60.

As shown in the figure, PMMU 70 is located between GBP 60 and CPSchannel 80, and acts as an external memory interface. In order tooptimize memory utilization, PMMU 70 includes multiple read and writebuffers, and supports numerous functions including global queuemanagement, which broadly includes assignment of cell pointers forrerouted incoming packets, maintenance of the global FAP, time-optimizedcell management, global memory budget management, GPID assignment andegress manager notification, write buffer management, read prefetchesbased upon egress manager/class of service requests, and smart memorycontrol.

As shown in FIG. 2, the CPS channel 80 is actually three separatechannels, referred to as the C-channel, the P-channel, and theS-channel. The C-channel is 128 bits wide, and runs at 132 MHZ. Packettransfers between ports occur on the C-channel. Since this channel isused solely for data transfer, there is no overhead associated with itsuse. The P-channel or protocol channel is synchronous or locked with theC-channel. During cell transfers, the message header is sent via theP-channel by the PMMU. The P-channel is 32 bits wide, and runs at 132MHZ.

The S or sideband channel runs at 132 MHZ, and is 32 bits wide. TheS-channel is used for functions such as for conveying Port Link Status,receive port full, port statistics, ARL table synchronization, memoryand register access to CPU and other CPU management functions, andglobal memory full and common memory full notification.

A proper understanding of the operation of SOC 10 requires a properunderstanding of the operation of CPS channel 80. Referring to FIG. 3,it can be seen that in SOC 10, on the ingress, packets are sliced by anEPIC 20 or GPIC 30 into 64-byte cells. The use of cells on-chip insteadof packets makes it easier to adapt the SOC to work with cell basedprotocols such as, for example, Asynchronous Transfer Mode (ATM).Presently, however, ATM utilizes cells which are 53 bytes long, with 48bytes for payload and 5 bytes for header. In the SOC, incoming packetsare sliced into cells which are 64 bytes long as discussed above, andthe cells are further divided into four separate 16 byte cell blocks Cn0. . . Cn3. Locked with the C-channel is the P-channel, which locks theopcode in synchronization with Cn0. A port bit map is inserted into theP-channel during the phase Cn1. The untagged bit map is inserted intothe P-channel during phase Cn2, and a time stamp is placed on theP-channel in Cn3. Independent from occurrences on the C and P-channel,the S-channel is used as a sideband, and is therefore decoupled fromactivities on the C and P-channel.

Cell or C-Channel

Arbitration for the CPS channel occurs out of band. Every module (EPIC,GPIC, etc.) monitors the channel, and matching destination ports respondto appropriate transactions. C-channel arbitration is a demand priorityround robin arbitration mechanism. If no requests are active, however,the default module, which can be selected during the configuration ofSOC 10, can park on the channel and have complete access thereto. If allrequests are active, the configuration of SOC 10 is such that the PMMUis granted access every other cell cycle, and EPICs 20 and GPICs 30share equal access to the C-channel on a round robin basis. FIGS. 4A and4B illustrate a C-channel arbitration mechanism wherein section A is thePMMU, and section B consists of two GPICs and three EPICs. The sectionsalternate access, and since the PMMU is the only module in section A, itgains access every other cycle. The modules in section B, as notedpreviously, obtain access on a round robin basis.

Protocol or P-Channel

Referring once again to the protocol or P-channel, a plurality ofmessages can be placed on the P-channel in order to properly direct flowof data flowing on the C-channel. Since P-channel 82 is 32 bits wide,and a message typically requires 128 bits, four smaller 32 bit messagesare put together in order to form a complete P-channel message. Thefollowing list identifies the fields and function and the various bitcounts of the 128 bit message on the P-channel.

-   -   Opcode—2 bits long—Identifies the type of message present on the        C channel 81;    -   IP Bit—1 bit long—This bit is set to indicate that the packet is        an IP switched packet;    -   IPX Bit—1 bit long—This bit is set to indicate that the packet        is an IPX switched packet;    -   Next Cell—2 bits long—A series of values to identify the valid        bytes in the corresponding cell on the C channel 81;    -   SRC DEST Port—6 bits long—Defines the port number which sends        the message or receives the message, with the interpretation of        the source or destination depending upon Opcode;    -   Cos—3 bits long—Defines class of service for the current packet        being processed;    -   J—1 bit long—Describes whether the current packet is a jumbo        packet;    -   S—1 bit long—Indicates whether the current cell is the first        cell of the packet;    -   E—1 bit long—Indicates whether the current cell is the last cell        of the packet;    -   CRC—2 bits long—Indicates whether a Cyclical Redundancy Check        (CRC) value should be appended to the packet and whether a CRC        value should be regenerated;    -   P Bit—1 bit long—Determines whether MMU should Purge the entire        packet;    -   Len—7 bytes—Identifies the valid number of bytes in current        transfer;    -   O—2 bits—Defines an optimization for processing by the CPU 52;        and    -   Bc/Mc Bitmap—28 bits—Defines the broadcast or multicast bitmap.        Identifies egress ports to which the packet should be set,        regarding multicast and broadcast messages.    -   Untag Bits/Source Port—28/5 bits long—Depending upon Opcode, the        packet is transferred from Port to MMU, and this field is        interpreted as the untagged bit map. A different Opcode        selection indicates that the packet is being transferred from        MMU to egress port, and the last six bits of this field is        interpreted as the Source Port field. The untagged bits        identifies the egress ports which will strip the tag header, and        the source port bits identifies the port number upon which the        packet has entered the switch;    -   U Bit—1 bit long—For a particular Opcode selection (0x01, this        bit being set indicates that the packet should leave the port as        Untagged; in this case, tag stripping is performed by the        appropriate MAC;    -   CPU Opcode—18 bits long—These bits are set if the packet is        being sent to the CPU for any reason. Opcodes are defined based        upon filter match, learn bits being set, routing bits,        destination lookup failure (DLF), station movement, etc;    -   Time Stamp—14 bits—The system puts a time stamp in this field        when the packet arrives, with a granularity of 1 μsec.

The opcode field of the P-channel message defines the type of messagecurrently being sent. While the opcode is currently shown as having awidth of 2 bits, the opcode field can be widened as desired to accountfor new types of messages as may be defined in the future. Graphically,however, the P-channel message type defined above is shown in FIG. 5.

An early termination message is used to indicate to CBM 71 that thecurrent packet is to be terminated. During operation, as discussed inmore detail below, the status bit (S) field in the message is set toindicate the desire to purge the current packet from memory. Also inresponse to the status bit all applicable egress ports would purge thecurrent packet prior to transmission.

The Src Dest Port field of the P-channel message, as stated above,define the destination and source port addresses, respectively. Eachfield is 6 bits wide and therefore allows for the addressing ofsixty-four ports.

The CRC field of the message is two bits wide and defines CRC actions.Bit 0 of the field provides an indication whether the associated egressport should append a CRC to the current packet. An egress port wouldappend a CRC to the current packet when bit 0 of the CRC field is set toa logical one. Bit 1 of the CRC field provides an indication whether theassociated egress port should regenerate a CRC for the current packet.An egress port would regenerate a CRC when bit 1 of the CRC field is setto a logical one. The CRC field is only valid for the last celltransmitted as defined by the E bit field of P-channel message set to alogical one.

As with the CRC field, the status bit field (st), the Len field, and theCell Count field of the message are only valid for the last cell of apacket being transmitted as defined by the E bit field of the message.

Last, the time stamp field of the message has a resolution of 1 μs andis valid only for the first cell of the packet defined by the S bitfield of the message. A cell is defined as the first cell of a receivedpacket when the S bit field of the message is set to a logical onevalue.

As is described in more detail below, the C channel 81 and the P channel82 are synchronously tied together such that data on C channel 81 istransmitted over the CPS channel 80 while a corresponding P channelmessage is simultaneously transmitted.

S-Channel or Sideband Channel

The S channel 83 is a 32-bit wide channel which provides a separatecommunication path within the SOC 10. The S channel 83 is used formanagement by CPU 52, SOC 10 internal flow control, and SOC 10inter-module messaging. The S channel 83 is a sideband channel of theCPS channel 80, and is electrically and physically isolated from the Cchannel 81 and the P channel 82. It is important to note that since theS channel is separate and distinct from the C channel 81 and the Pchannel 82, operation of the S channel 83 can continue withoutperformance degradation related to the C channel 81 and P channel 82operation. Conversely, since the C channel is not used for thetransmission of system messages, but rather only data, there is nooverhead associated with the C channel 81 and, thus, the C channel 81 isable to free-run as needed to handle incoming and outgoing packetinformation.

The S channel 83 of CPS channel 80 provides a system wide communicationpath for transmitting system messages, for example, providing the CPU 52with access to the control structure of the SOC 10. System messagesinclude port status information, including port link status, receiveport full, and port statistics, ARL table 22 synchronization, CPU 52access to GBP 60 and CBP 50 memory buffers and SOC 10 control registers,and memory full notification corresponding to GBP 60 and/or CBP 50.

FIG. 6 illustrates a message format for an S channel message on Schannel 83. The message is formed of four 32-bit words; the bits of thefields of the words are defined as follows:

-   -   Opcode—6 bits long—Identifies the type of message present on the        S channel;    -   Dest Port—6 bits long—Defines the port number to which the        current S channel message is addressed;    -   Src Port—6 bits long—Defines the port number of which the        current S channel message originated;    -   COS—3 bits long—Defines the class of service associated with the        current S channel message; and    -   C bit—1 bit long—Logically defines whether the current S channel        message is intended for the CPU 52.    -   Error Code—2 bits long—Defines a valid error when the E bit is        set;    -   DataLen—7 bits long—Defines the total number of data bytes in        the Data field;    -   E bit—1 bit long—Logically indicates whether an error has        occurred in the execution of the current command as defined by        opcode;    -   Address—32 bits long—Defines the memory address associated with        the current command as defined in opcode;    -   Data—0-127 bits long—Contains the data associated with the        current opcode.

With the configuration of CPS channel 80 as explained above, thedecoupling of the S channel from the C channel and the P channel is suchthat the bandwidth on the C channel can be preserved for cell transfer,and that overloading of the C channel does not affect communications onthe sideband channel.

SOC Operation

The configuration of the SOC 10 supports fast ethernet ports, gigabitports, and extendible interconnect links as discussed above. The SOCconfiguration can also be “stacked”, thereby enabling significant portexpansion capability. Once data packets have been received by SOC 10,sliced into cells, and placed on CPS channel 80, stacked SOC modules caninterface with the CPS channel and monitor the channel, and extractappropriate information as necessary. As will be discussed below, asignificant amount of concurrent lookups and filtering occurs as thepacket comes in to ingress submodule 14 of an EPIC 20 or GPIC 30, withrespect to layer two and layer three lookups, and fast filtering.

Now referring to FIGS. 8 and 9, the handling of a data packet isdescribed. For explanation purposes, ethernet data to be received willconsider to arrive at one of the ports 24 a of EPIC 20 a. It will bepresumed that the packet is intended to be transmitted to a user on oneof ports 24 c of EPIC 20 c. All EPICs 20 (20 a, 20 b, 20 c, etc.) havesimilar features and functions, and each individually operate based onpacket flow.

An input data packet 112 is applied to the port 24 a is shown. The datapacket 112 is, in this example, defined per the current standards for10/100 Mbps Ethernet transmission and may have any length or structureas defined by that standard. This discussion will assume the length ofthe data packet 112 to be 1024 bits or 128 bytes.

When the data packet 112 is received by the EPIC module 20 a, an ingresssub-module 14 a, as an ingress function, determines the destination ofthe packet 112. The first 64 bytes of the data packet 112 is buffered bythe ingress sub-module 14 a and compared to data stored in the lookuptables 21 a to determine the destination port 24 c. Also as an ingressfunction, the ingress sub-module 14 a slices the data packet 112 into anumber of 64-byte cells; in this case, the 128 byte packet is sliced intwo 64 byte cells 112 a and 112 b. While the data packet 112 is shown inthis example to be exactly two 64-byte cells 112 a and 112 b, an actualincoming data packet may include any number of cells, with at least onecell of a length less than 64 bytes. Padding bytes are used to fill thecell. In such cases the ingress sub-module 14 a disregards the paddingbytes within the cell. Further discussions of packet handling will referto packet 112 and/or cells 112 a and 112 b.

It should be noted that each EPIC 20 (as well as each GPIC 30) has aningress submodule 14 and egress submodule 16, which provide portspecific ingress and egress functions. All incoming packet processingoccurs in ingress submodule 14, and features such as the fast filteringprocessor, layer two (L2) and layer three (L3) lookups, layer twolearning, both self-initiated and CPU 52 initiated, layer two tablemanagement, layer two switching, packet slicing, and channel dispatchingoccurs in ingress submodule 14. After lookups, fast filter processing,and slicing into cells, as noted above and as will be discussed below,the packet is placed from ingress submodule 14 into dispatch unit 18,and then placed onto CPS channel 80 and memory management is handled byPMMU 70. A number of ingress buffers are provided in dispatch unit 18 toensure proper handling of the packets/cells. Once the cells orcellularized packets are placed onto the CPS channel 80, the ingresssubmodule is finished with the packet. The ingress is not involved withdynamic memory allocation, or the specific path the cells will taketoward the destination. Egress submodule 16, illustrated in FIG. 8 assubmodule 16 a of EPIC 20 a, monitors CPS channel 80 and continuouslylooks for cells destined for a port of that particular EPIC 20. When thePMMU 70 receives a signal that an egress associated with a destinationof a packet in memory is ready to receive cells, PMMU 70 pulls the cellsassociated with the packet out of the memory, as will be discussedbelow, and places the cells on CPS channel 80, destined for theappropriate egress submodule. A FIFO in the egress submodule 16continuously sends a signal onto the CPS channel 80 that it is ready toreceive packets, when there is room in the FIFO for packets or cells tobe received. As noted previously, the CPS channel 80 is configured tohandle cells, but cells of a particular packet are always handledtogether to avoid corrupting of packets. In order to overcome data flowdegradation problems associated with overhead usage of the C channel 81,all L2 learning and L2 table management is achieved through the use ofthe S channel 83. L2 self-initiated learning is achieved by decipheringthe source address of a user at a given ingress port 24 utilizing thepacket's associated address. Once the identity of the user at theingress port 24 is determined, the ARL/L3 tables 21 a are updated toreflect the user identification. The ARL/L3 tables 21 of each other EPIC20 and GPIC 30 are updated to reflect the newly acquired useridentification in a synchronizing step, as will be discussed below. As aresult, while the ingress of EPIC 20 a may determine that a given useris at a given port 24 a, the egress of EPIC 20 b, whose table 21 b hasbeen updated with the user's identification at port 24 a, can thenprovide information to the User at port 24 a without re-learning whichport the user was connected.

Table management may also be achieved through the use of the CPU 52. CPU52, via the CMIC 40, can provide the SOC 10 with software functionswhich result in the designation of the identification of a user at agiven port 24. As discussed above, it is undesirable for the CPU 52 toaccess the packet information in its entirety since this would lead toperformance degradation. Rather, the SOC 10 is programmed by the CPU 52with identification information concerning the user. The SOC 10 canmaintain real-time data flow since the table data communication betweenthe CPU 52 and the SOC 10 occurs exclusively on the S channel 83. Whilethe SOC 10 can provide the CPU 52 with direct packet information via theC channel 81, such a system setup is undesirable for the reasons setforth above. As stated above, as an ingress function an addressresolution lookup is performed by examining the ARL table 21 a. If thepacket is addressed to one of the layer three (L3) switches of the SOC10, then the ingress sub-module 14 a performs the L3 and default tablelookup. Once the destination port has been determined, the EPIC 20 asets a ready flag in the dispatch unit 18 a which then arbitrates for Cchannel 81.

The C channel 81 arbitration scheme, as discussed previously and asillustrated in FIGS. 4A and 4B, is Demand Priority Round-Robin. Each I/Omodule, EPIC 20, GPIC 30, and CMIC 40, along with the PMMU 70, caninitiate a request for C channel access. If no requests exist at any onegiven time, a default module established with a high priority getscomplete access to the C channel 81. If any one single I/O module or thePMMU 70 requests C channel 81 access, that single module gains access tothe C channel 81 on-demand.

If EPIC modules 20 a, 20 b, 20 c, and GPIC modules 30 a and 30 b, andCMIC 40 simultaneously request C channel access, then access is grantedin round-robin fashion. For a given arbitration time period each of theI/O modules would be provided access to the C channel 81. For example,each GPIC module 30 a and 30 b would be granted access, followed by theEPIC modules, and finally the CMIC 40. After every arbitration timeperiod the next I/O module with a valid request would be given access tothe C channel 81. This pattern would continue as long as each of the I/Omodules provide an active C channel 81 access request.

If all the I/O modules, including the PMMU 70, request C channel 81access, the PMMU 70 is granted access as shown in FIG. 4B since the PMMUprovides a critical data path for all modules on the switch. Upongaining access to the channel 81, the dispatch unit 18 a proceeds inpassing the received packet 112, one cell at a time, to C channel 81.

Referring again to FIG. 3, the individual C, P, and S channels of theCPS channel 80 are shown. Once the dispatch unit 18 a has been givenpermission to access the CPS channel 80, during the first time periodCn0, the dispatch unit 18 a places the first 16 bytes of the first cell112 a of the received packet 112 on the C channel 81. Concurrently, thedispatch unit 18 a places the first P channel message corresponding tothe currently transmitted cell. As stated above, the first P channelmessage defines, among other things, the message type. Therefore, thisexample is such that the first P channel message would define thecurrent cell as being a unicast type message to be directed to thedestination egress port 21 c.

During the second clock cycle Cn1, the second 16 bytes (16:31) of thecurrently transmitted data cell 112 a are placed on the C channel 81.Likewise, during the second clock cycle Cn1, the Bc/Mc Port Bitmap isplaced on the P channel 82.

As indicated by the hatching of the S channel 83 data during the timeperiods Cn0 to Cn3 in FIG. 3, the operation of the S channel 83 isdecoupled from the operation of the C channel 81 and the P channel 82.For example, the CPU 52, via the CMIC 40, can pass system level messagesto non-active modules while an active module passes cells on the Cchannel 81. As previously stated, this is an important aspect of the SOC10 since the S channel operation allows parallel task processing,permitting the transmission of cell data on the C channel 81 inreal-time. Once the first cell 112 a of the incoming packet 112 isplaced on the CPS channel 80 the PMMU 70 determines whether the cell isto be transmitted to an egress port 21 local to the SOC 10.

If the PMMU 70 determines that the current cell 112 a on the C channel81 is destined for an egress port of the SOC 10, the PMMU 70 takescontrol of the cell data flow.

FIG. 10 illustrates, in more detail, the functional egress aspects ofPMMU 70. PMMU 70 includes CBM 71, and interfaces between the GBP, CBPand a plurality of egress managers (EgM) 76 of egress submodule 18, withone egress manager 76 being provided for each egress port. CBM 71 isconnected to each egress manager 76, in a parallel configuration, via Rchannel data bus 77. R channel data bus 77 is a 32-bit wide bus used byCBM 71 and egress managers 76 in the transmission of memory pointers andsystem messages. Each egress manager 76 is also connected to CPS channel80, for the transfer of data cells 112 a and 112 b.

CBM 71, in summary, performs the functions of on-chip FAP (free addresspool) management, transfer of cells to CBP 50, packet assembly andnotification to the respective egress managers, rerouting of packets toGBP 60 via a global buffer manager, as well as handling packet flow fromthe GBP 60 to CBP 50. Memory clean up, memory budget management, channelinterface, and cell pointer assignment are also functions of CBM 71.With respect to the free address pool, CBM 71 manages the free addresspool and assigns free cell pointers to incoming cells. The free addresspool is also written back by CBM 71, such that the released cellpointers from various egress managers 76 are appropriately cleared.Assuming that there is enough space available in CBP 50, and enough freeaddress pointers available, CBM 71 maintains at least two cell pointersper egress manager 76 which is being managed. The first cell of a packetarrives at an egress manager 76, and CBM 71 writes this cell to the CBMmemory allocation at the address pointed to by the first pointer. In thenext cell header field, the second pointer is written. The format of thecell as stored in CBP 50 is shown in FIG. 11; each line is 18 byteswide. Line 0 contains appropriate information with respect to first celland last cell information, broadcast/multicast, number of egress portsfor broadcast or multicast, cell length regarding the number of validbytes in the cell, the next cell pointer, total cell count in thepacket, and time stamp. The remaining lines contain cell data as 64 bytecells. The free address pool within PMMU 70 stores all free pointers forCBP 50. Each pointer in the free address pool points to a 64-byte cellin CBP 50; the actual cell stored in the CBP is a total of 72 bytes,with 64 bytes being byte data, and 8 bytes of control information.Functions such as HOL blocking high and low watermarks, out queue budgetregisters, CPID assignment, and other functions are handled in CBM 71,as explained herein.

When PMMU 70 determines that cell 112 a is destined for an appropriateegress port on SOC 10, PMMU 70 controls the cell flow from CPS channel80 to CBP 50. As the data packet 112 is received at PMMU 70 from CPS 80,CBM 71 determines whether or not sufficient memory is available in CBP50 for the data packet 112. A free address pool (not shown) can providestorage for at least two cell pointers per egress manager 76, per classof service. If sufficient memory is available in CBP 50 for storage andidentification of the incoming data packet, CBM 71 places the data cellinformation on CPS channel 80. The data cell information is provided byCBM 71 to CBP 50 at the assigned address. As new cells are received byPMMU 70, CBM 71 assigns cell pointers. The initial pointer for the firstcell 112 a points to the egress manager 76 which corresponds to theegress port to which the data packet 112 will be sent after it is placedin memory. In the example of FIG. 8, packets come in to port 24 a ofEPIC 20 a, and are destined for port 24 c of EPIC 20 c. For eachadditional cell 112 b, CBM 71 assigns a corresponding pointer. Thiscorresponding cell pointer is stored as a two byte or 16 bit valueNC_header, in an appropriate place on a control message, with theinitial pointer to the corresponding egress manager 76, and successivecell pointers as part of each cell header, a linked list of memorypointers is formed which defines packet 112 when the packet istransmitted via the appropriate egress port, in this case 24 c. Once thepacket is fully written into CBP 50, a corresponding CBP PacketIdentifier (CPID) is provided to the appropriate egress manager 76; thisCPID points to the memory location of initial cell 112 a. The CPID forthe data packet is then used when the data packet 112 is sent to thedestination egress port 24 c. In actuality, the CBM 71 maintains twobuffers containing a CBP cell pointer, with admission to the CBP beingbased upon a number of factors. An example of admission logic for CBP 50will be discussed below with reference to FIG. 12.

Since CBM 71 controls data flow within SOC 10, the data flow associatedwith any ingress port can likewise be controlled. When packet 112 hasbeen received and stored in CBP 50, a CPID is provided to the associatedegress manager 76. The total number of data cells associated with thedata packet is stored in a budget register (not shown). As more datapackets 112 are received and designated to be sent to the same egressmanager 76, the value of the budget register corresponding to theassociated egress manager 76 is incremented by the number of data cells112 a, 112 b of the new data cells received. The budget registertherefore dynamically represents the total number of cells designated tobe sent by any specific egress port on an EPIC 20. CBM 71 controls theinflow of additional data packets by comparing the budget register to ahigh watermark register value or a low watermark register value, for thesame egress.

When the value of the budget register exceeds the high watermark value,the associated ingress port is disabled. Similarly, when data cells ofan egress manager 76 are sent via the egress port, and the correspondingbudget register decreases to a value below the low watermark value, theingress port is once again enabled. When egress manager 76 initiates thetransmission of packet 112, egress manager 76 notifies CBM 71, whichthen decrements the budget register value by the number of data cellswhich are transmitted. The specific high watermark values and lowwatermark values can be programmed by the user via CPU 52. This givesthe user control over the data flow of any port on any EPIC 20 or GPIC30.

Egress manager 76 is also capable of controlling data flow. Each egressmanager 76 is provided with the capability to keep track of packetidentification information in a packet pointer budget register; as a newpointer is received by egress manager 76, the associated packet pointerbudget register is incremented. As egress manager 76 sends out a datapacket 112, the packet pointer budget register is decremented. When astorage limit assigned to the register is reached, corresponding to afull packet identification pool, a notification message is sent to allingress ports of the SOC 10, indicating that the destination egress portcontrolled by that egress manager 76 is unavailable. When the packetpointer budget register is decremented below the packet pool highwatermark value, a notification message is sent that the destinationegress port is now available. The notification messages are sent by CBM71 on the S channel 83.

As noted previously, flow control may be provided by CBM 71, and also byingress submodule 14 of either an EPIC 20 or GPIC 30. Ingress submodule14 monitors cell transmission into ingress port 24. When a data packet112 is received at an ingress port 24, the ingress submodule 14increments a received budget register by the cell count of the incomingdata packet. When a data packet 112 is sent, the corresponding ingress14 decrements the received budget register by the cell count of theoutgoing data packet 112. The budget register 72 is decremented byingress 14 in response to a decrement cell count message initiated byCBM 71, when a data packet 112 is successfully transmitted from CBP 50.

Efficient handling of the CBP and GBP is necessary in order to maximizethroughput, to prevent port starvation, and to prevent port underrun.For every ingress, there is a low watermark and a high watermark; ifcell count is below the low watermark, the packet is admitted to theCBP, thereby preventing port starvation by giving the port anappropriate share of CBP space.

FIG. 12 generally illustrates the handling of a data packet 112 when itis received at an appropriate ingress port. This figure illustratesdynamic memory allocation on a single port, and is applicable for eachingress port. In step 12-1, packet length is estimated by estimatingcell count based upon egress manager count plus incoming cell count.After this cell count is estimated, the GBP current cell count ischecked at step 12-2 to determine whether or not the GBP 60 is empty. Ifthe GBP cell count is 0, indicating that GBP 60 is empty, the methodproceeds to step 12-3, where it is determined whether or not theestimated cell count from step 12-1 is less than the admission lowwatermark. The admission low watermark value enables the reception ofnew packets 112 into CBP 50 if the total number of cells in theassociated egress is below the admission low watermark value. If yes,therefore, the packet is admitted at step 12-5. If the estimated cellcount is not below the admission low watermark, CBM 71 then arbitratesfor CBP memory allocation with other ingress ports of other EPICs andGPICs, in step 12-4. If the arbitration is unsuccessful, the incomingpacket is sent to a reroute process, referred to as A. If thearbitration is successful, then the packet is admitted to the CBP atstep 12-5. Admission to the CBP is necessary for linespeed communicationto occur.

The above discussion is directed to a situation wherein the GBP cellcount is determined to be 0. If in step 12-2 the GBP cell count isdetermined not to be 0, then the method proceeds to step 12-6, where theestimated cell count determined in step 12-1 is compared to theadmission high watermark. If the answer is no, the packet is rerouted toGBP 60 at step 12-7. If the answer is yes, the estimated cell count isthen compared to the admission low watermark at step 12-8. If the answeris no, which means that the estimated cell count is between the highwatermark and the low watermark, then the packet is rerouted to GBP 60at step 12-7. If the estimated cell count is below the admission lowwatermark, the GBP current count is compared with a reroute cell limitvalue at step 12-9. This reroute cell limit value is user programmablethrough CPU 52. If the GBP count is below or equal to the reroute celllimit value at step 12-9, the estimated cell count and GBP count arecompared with an estimated cell count low watermark; if the combinationof estimated cell count and GBP count are less than the estimated cellcount low watermark, the packet is admitted to the CBP. If the sum isgreater than the estimated cell count low watermark, then the packet isrerouted to GBP 60 at step 12-7. After rerouting to GBP 60, the GBP cellcount is updated, and the packet processing is finished. It should benoted that if both the CBP and the GBP are full, the packet is dropped.Dropped packets are handled in accordance with known ethernet or networkcommunication procedures, and have the effect of delaying communication.However, this configuration applies appropriate back pressure by settingwatermarks, through CPU 52, to appropriate buffer values on a per portbasis to maximize memory utilization. This CBP/GBP admission logicresults in a distributed hierarchical shared memory configuration, witha hierarchy between CBP 50 and GBP 60, and hierarchies within the CBP.

Address Resolution (L2)+(L3)

FIG. 14 illustrates some of the concurrent filtering and look-up detailsof a packet coming into the ingress side of an EPIC 20. FIG. 12, asdiscussed previously, illustrates the handling of a data packet withrespect to admission into the distributed hierarchical shared memory.FIG. 14 addresses the application of filtering, address resolution, andrules application segments of SOC 10. These functions are performedsimultaneously with respect to the CBP admission discussed above. Asshown in the figure, packet 112 is received at input port 24 of EPIC 20.It is then directed to input FIFO 142. As soon as the first sixteenbytes of the packet arrive in the input FIFO 142, an address resolutionrequest is sent to ARL engine 143; this initiates lookup in ARL/L3tables 21.

A description of the fields of an ARL table of ARL/L3 tables 21 is asfollows:

-   -   Mac Address—48 bits long—Mac Address;    -   VLAN tag—12 bits long—VLAN Tag Identifier as described in IEEE        802.1q standard for tagged packets. For an untagged Packet, this        value is picked up from Port Based VLAN Table.    -   CosDst—3 bits long—Class of Service based on the Destination        Address. COS identifies the priority of this packet. 8 levels of        priorities as described in IEEE 802.1p standard.    -   Port Number—6 bits long—Port Number is the port on which this        Mac address is learned.    -   SD_Disc Bits—2 bits long—These bits identifies whether the        packet should be discarded based on Source Address or        Destination Address. Value 1 means discard on source. Value 2        means discard on destination.    -   C bit—1 bit long—C Bit identifies that the packet should be        given to CPU Port.    -   St Bit—1 bit long—St Bit identifies that this is a static entry        (it is not learned Dynamically) and that means is should not be        aged out. Only CPU 52 can delete this entry.    -   Ht Bit—1 bit long—Hit Bit—This bit is set if there is match with        the Source Address. It is used in the aging Mechanism.    -   CosSrc—3 bits long—Class of Service based on the Source Address.        COS identifies the priority of this packet.    -   L3 Bit—1 bit long—L3 Bit—identifies that this entry is created        as result of L3 Interface Configuration. The Mac address in this        entry is L3 interface Mac Address and that any Packet addresses        to this Mac Address need to be routed.    -   T Bit—1 bit long—T Bit identifies that this Mac address is        learned from one of the Trunk Ports. If there is a match on        Destination address then output port is not decided on the Port        Number in this entry, but is decided by the Trunk Identification        Process based on the rules identified by the RTAG bits and the        Trunk group Identified by the TGID.    -   TGID—3 bits long—TGID identifies the Trunk Group if the T Bit is        set. SOC 10 supports 6 Trunk Groups per switch.    -   RTAG—3 bits long—RTAG identifies the Trunk selection criterion        if the destination address matches this entry and the T bit is        set in that entry. Value 1—based on Source Mac Address. Value        2—based on Destination Mac Address. Value 3—based on Source &        destination Address. Value 4—based on Source IP Address. Value        5—based on Destination IP Address. Value 6—based on Source and        Destination IP Address.    -   S C P—1 bit long—Source CoS Priority Bit—If this bit is set (in        the matched Source Mac Entry) then Source CoS has priority over        Destination Cos.

It should also be noted that VLAN tables 23 include a number of tableformats; all of the tables and table formats will not be discussed here.However, as an example, the port based VLAN table fields are describedas follows:

-   -   Port VLAN Id—12 bits long—Port VLAN Identifier is the VLAN Id        used by Port Based VLAN.    -   Sp State—2 bits long—This field identifies the current Spanning        Tree State. Value 0x00—Port is in Disable State. No packets are        accepted in this state, not even BPDUs. Value 0x01—Port is in        Blocking or Listening State. In this state no packets are        accepted by the port, except BPDUs. Value 0x02—Port is in        Learning State. In this state the packets are not forwarded to        another Port but are accepted for learning. Value 0x03—Port is        in Forwarding State. In this state the packets are accepted both        for learning and forwarding.    -   Port Discard Bits—6 bits long—There are 6 bits in this field and        each bit identifies the criterion to discard the packets coming        in this port. Note: Bits 0 to 3 are not used. Bit 4—If this bit        is set then all the frames coming on this port will be        discarded. Bit 5—If this bit is set then any 802.1q Priority        Tagged (vid=0) and Untagged frame coming on this port will be        discarded.    -   J Bit—1 bit long—J Bit means Jumbo bit. If this bit is set then        this port should accept Jumbo Frames.    -   RTAG—3 bits long—RTAG identifies the Trunk selection criterion        if the destination address matches this entry and the T bit is        set in that entry. Value 1—based on Source Mac Address. Value        2—based on Destination Mac Address. Value 3—based on Source &        destination Address. Value 4—based on Source IP Address. Value        5—based on Destination IP Address. Value 6—based on Source and        Destination IP Address.    -   T Bit—1 bit long—This bit identifies that the Port is a member        of the Trunk Group.    -   C Learn Bit—1 bit long—Cpu Learn Bit—If this bit is set then the        packet is send to the CPU whenever the source Address is        learned.    -   PT—2 bits long—Port Type identifies the port Type. Value 0-10        Mbit Port. Value 1-100 Mbit Port. Value 2-1 Gbit Port. Value        3-CPU Port.    -   VLAN Port Bitmap—28 bits long—VLAN Port Bitmap Identifies all        the egress ports on which the packet should go out.    -   B Bit—1 bit long—B bit is BPDU bit. If this bit is set then the        Port rejects BPDUs. This Bit is set for Trunk Ports which are        not supposed to accept BPDUs.    -   TGID—3 bits long—TGID—this field identifies the Trunk Group        which this port belongs to.    -   Untagged Bitmap—28 bits long—This bitmap identifies the Untagged        Members of the VLAN. i.e. if the frame destined out of these        members ports should be transmitted without Tag Header.    -   M Bits—1 bit long—M Bit is used for Mirroring Functionality. If        this bit is set then mirroring on Ingress is enabled.

The ARL engine 143 reads the packet; if the packet has a VLAN tagaccording to IEEE Standard 802.1q, then ARL engine 143 performs alook-up based upon tagged VLAN table 231, which is part of VLAN table23. If the packet does not contain this tag, then the ARL engineperforms VLAN lookup based upon the port based VLAN table 232. Once theVLAN is identified for the incoming packet, ARL engine 143 performs anARL table search based upon the source MAC address and the destinationMAC address. If the results of the destination search is an L3 interfaceMAC address, then an L3 search is performed of an L3 table within ARL/L3table 21. If the L3 search is successful, then the packet is modifiedaccording to packet routing rules. To better understand lookups,learning, and switching, it may be advisable to once again discuss thehandling of packet 112 with respect to FIG. 8. If data packet 112 issent from a source station A into port 24 a of EPIC 20 a, and destinedfor a destination station B on port 24 c of EPIC 20 c, ingress submodule14 a slices data packet 112 into cells 112 a and 112 b. The ingresssubmodule then reads the packet to determine the source MAC address andthe destination MAC address. As discussed previously, ingress submodule14 a, in particular ARL engine 143, performs the lookup of appropriatetables within ARL/L3 tables 21 a, and VLAN table 23 a, to see if thedestination MAC address exists in ARL/L3 tables 21 a; if the address isnot found, but if the VLAN IDs are the same for the source anddestination, then ingress submodule 14 a will set the packet to be sentto all ports. The packet will then propagate to the appropriatedestination address. A “source search” and a “destination search” occursin parallel. Concurrently, the source MAC address of the incoming packetis “learned”, and therefore added to an ARL table within ARL/L3 table 21a. After the packet is received by the destination, an acknowledgment issent by destination station B to source station A. Since the source MACaddress of the incoming packet is learned by the appropriate table of B,the acknowledgment is appropriately sent to the port on which A islocated. When the acknowledgment is received at port 24 a, therefore,the ARL table learns the source MAC address of B from the acknowledgmentpacket. It should be noted that as long as the VLAN IDs (for taggedpackets) of source MAC addresses and destination MAC addresses are thesame, layer two switching as discussed above is performed. L2 switchingand lookup is therefore based on the first 16 bytes of an incomingpacket. For untagged packets, the port number field in the packet isindexed to the port-based VLAN table within VLAN table 23 a, and theVLAN ID can then be determined. If the VLAN IDs are different, however,L3 switching is necessary wherein the packets are sent to a differentVLAN. L3 switching, however, is based on the IP header field of thepacket. The IP header includes source IP address, destination IPaddress, and TTL (time-to-live).

In order to more clearly understand layer three switching according tothe invention, data packet 112 is sent from source station A onto port24 a of EPIC 20 a, and is directed to destination station B; assume,however, that station B is disposed on a different VLAN, as evidenced bythe source MAC address and the destination MAC address having differingVLAN IDs. The lookup for B would be unsuccessful since B is located on adifferent VLAN, and merely sending the packet to all ports on the VLANwould result in B never receiving the packet. Layer three switching,therefore, enables the bridging of VLAN boundaries, but requires readingof more packet information than just the MAC addresses of L2 switching.In addition to reading the source and destination MAC addresses,therefore, ingress 14 a also reads the IP address of the source anddestination. As noted previously, packet types are defined by IEEE andother standards, and are known in the art. By reading the IP address ofthe destination, SOC 10 is able to target the packet to an appropriaterouter interface which is consistent with the destination IP address.Packet 112 is therefore sent on to CPS channel 80 through dispatch unit18 a, destined for an appropriate router interface (not shown, and notpart of SOC 10), upon which destination B is located. Control frames,identified as such by their destination address, are sent to CPU 52 viaCMIC 40. The destination MAC address, therefore, is the router MACaddress for B. The router MAC address is learned through the assistanceof CPU 52, which uses an ARP (address resolution protocol) request torequest the destination MAC address for the router for B, based upon theIP address of B. Through the use of the IP address, therefore, SOC 10can learn the MAC address. Through the acknowledgment and learningprocess, however, it is only the first packet that is subject to this“slow” handling because of the involvement of CPU 52. After theappropriate MAC addresses are learned, linespeed switching can occurthrough the use of concurrent table lookups since the necessaryinformation will be learned by the tables. Implementing the tables insilicon as two-dimensional arrays enables such rapid concurrent lookups.Once the MAC address for B has been learned, therefore, when packetscome in with the IP address for B, ingress 14 a changes the IP addressto the destination MAC address, in order to enable linespeed switching.Also, the source address of the incoming packet is changed to the routerMAC address for A rather than the IP address for A, so that theacknowledgment from B to A can be handled in a fast manner withoutneeding to utilize a CPU on the destination end in order to identify thesource MAC address to be the destination for the acknowledgment.Additionally, a TTL (time-to-live) field in the packet is appropriatelymanipulated in accordance with the IETF (Internet Engineering TaskForce) standard. A unique aspect of SOC 10 is that all of the switching,packet processing, and table lookups are performed in hardware, ratherthan requiring CPU 52 or another CPU to spend time processinginstructions. It should be noted that the layer three tables for EPIC 20can have varying sizes; in a preferred embodiment, these tables arecapable of holding up to 2000 addresses, and are subject to purging anddeletion of aged addresses, as explained herein.

Referring again to the discussion of FIG. 14, as soon as the first 64(sixty four) bytes of the packet arrive in input FIFO 142, a filteringrequest is sent to FFP 141. FFP 141 is an extensive filtering mechanismwhich enables SOC 10 to set inclusive and exclusive filters on any fieldof a packet from layer 2 to layer 7 of the OSI seven layer model.Filters are used for packet classification based upon a protocol fieldsin the packets. Various actions are taken based upon the packetclassification, including packet discard, sending of the packet to theCPU, sending of the packet to other ports, sending the packet on certainCOS priority queues, changing the type of service (TOS) precedence. Theexclusive filter is primarily used for implementing security features,and allows a packet to proceed only if there is a filter match. If thereis no match, the packet is discarded.

It should be noted that SOC 10 has a unique capability to handle bothtagged and untagged packets coming in. Tagged packets are tagged inaccordance with IEEE standards, and include a specific IEEE 802.1ppriority field for the packet. Untagged packets, however, do not includean 802.1p priority field therein. SOC 10 can assign an appropriate COSvalue for the packet, which can be considered to be equivalent to aweighted priority, based either upon the destination address or thesource address of the packet, as matched in one of the table lookups. Asnoted in the ARL table format discussed herein, an SCP (Source COSPriority) bit is contained as one of the fields of the table. When thisSCP bit is set, then SOC 10 will assign weighted priority based upon asource COS value in the ARL table. If the SCP is not set, then SOC 10will assign a COS for the packet based upon the destination COS field inthe ARL table. These COS values are three bit fields in the ARL table,as noted previously in the ARL table field descriptions.

FFP 141 is essentially a state machine driven programmable rules engine.The filters used by the FFP are 64 (sixty-four) bytes wide, and areapplied on an incoming packet; any offset can be used, however, apreferred embodiment uses an offset of zero, and therefore operates onthe first 64 bytes, or 512 bits, of a packet. The actions taken by thefilter are tag insertion, priority mapping, TOS tag insertion, sendingof the packet to the CPU, dropping of the packet, forwarding of thepacket to an egress port, and sending the packet to a mirrored port. Thefilters utilized by FFP 141 are defined by rules table 22. Rules table22 is completely programmable by CPU 52, through CMIC 40. The rulestable can be, for example, 256 entries deep, and may be partitioned forinclusive and exclusive filters, with, again as an example, 128 entriesfor inclusive filters and 128 entries for exclusive filters. A filterdatabase, within FFP 141, includes a number of inclusive mask registersand exclusive mask registers, such that the filters are formed basedupon the rules in rules table 22, and the filters therefore essentiallyform a 64 byte wide mask or bit map which is applied on the incomingpacket. If the filter is designated as an exclusive filter, the filterwill exclude all packets unless there is a match. In other words, theexclusive filter allows a packet to go through the forwarding processonly if there is a filter match. If there is no filter match, the packetis dropped. In an inclusive filter, if there is no match, no action istaken but the packet is not dropped. Action on an exclusive filterrequires an exact match of all filter fields. If there is an exact matchwith an exclusive filter, therefore, action is taken as specified in theaction field; the actions which may be taken, are discussed above. Ifthere is no full match or exact of all of the filter fields, but thereis a partial match, then the packet is dropped. A partial match isdefined as either a match on the ingress field, egress field, or filterselect fields. If there is neither a full match nor a partial match withthe packet and the exclusive filter, then no action is taken and thepacket proceeds through the forwarding process. The FFP configuration,taking action based upon the first 64 bytes of a packet, enhances thehandling of real time traffic since packets can be filtered and actioncan be taken on the fly. Without an FFP according to the invention, thepacket would need to be transferred to the CPU for appropriate action tobe interpreted and taken. For inclusive filters, if there is a filtermatch, action is taken, and if there is no filter match, no action istaken; however, packets are not dropped based on a match or no matchsituation for inclusive filters.

In summary, the FFP includes a filter database with eight sets ofinclusive filters and eight sets of exclusive filters, as separatefilter masks. As a packet comes into the FFP, the filter masks areapplied to the packet; in other words, a logical AND operation isperformed with the mask and the packet. If there is a match, thematching entries are applied to rules tables 22, in order to determinewhich specific actions will be taken. As mentioned previously, theactions include 802.1p tag insertion, 802.1p priority mapping, IP TOS(type-of-service) tag insertion, sending of the packet to the CPU,discarding or dropping of the packet, forwarding the packet to an egressport, and sending the packet to the mirrored port. Since there are alimited number of fields in the rules table, and since particular rulesmust be applied for various types of packets, the rules tablerequirements are minimized in the present invention by the presentinvention setting all incoming packets to be “tagged” packets; alluntagged packets, therefore, are subject to 802.1p tag insertion, inorder to reduce the number of entries which are necessary in the rulestable. This action eliminates the need for entries regarding handling ofuntagged packets. It should be noted that specific packet types aredefined by various IEEE and other networking standards, and will not bedefined herein.

As noted previously, exclusive filters are defined in the rules table asfilters which exclude packets for which there is no match; excludedpackets are dropped. With inclusive filters, however, packets are notdropped in any circumstances. If there is a match, action is taken asdiscussed above; if there is no match, no action is taken and the packetproceeds through the forwarding process. Referring to FIG. 15, FFP 141is shown to include filter database 1410 containing filter maskstherein, communicating with logic circuitry 1411 for determining packettypes and applying appropriate filter masks. After the filter mask isapplied as noted above, the result of the application is applied torules table 22, for appropriate lookup and action. It should be notedthat the filter masks, rules tables, and logic, while programmable byCPU 52, do not rely upon CPU 52 for the processing and calculationthereof. After programming, a hardware configuration is provided whichenables linespeed filter application and lookup.

Referring once again to FIG. 14, after FFP 141 applies appropriateconfigured filters and results are obtained from the appropriate rulestable 22, logic 1411 in FFP 141 determines and takes the appropriateaction. The filtering logic can discard the packet, send the packet tothe CPU 52, modify the packet header or IP header, and recalculate anyIP checksum fields or takes other appropriate action with respect to theheaders. The modification occurs at buffer slicer 144, and the packet isplaced on C channel 81. The control message and message headerinformation is applied by the FFP 141 and ARL engine 143, and themessage header is placed on P channel 82. Dispatch unit 18, alsogenerally discussed with respect to FIG. 8, coordinates all dispatchesto C channel, P channel and S channel. As noted previously, each EPICmodule 20, GPIC module 30, PMMU 70, etc. are individually configured tocommunicate via the CPS channel. Each module can be independentlymodified, and as long as the CPS channel interfaces are maintained,internal modifications to any modules such as EPIC 20 a should notaffect any other modules such as EPIC 20 b, or any GPICs 30.

As mentioned previously, FFP 141 is programmed by the user, through CPU52, based upon the specific functions which are sought to be handled byeach FFP 141. Referring to FIG. 17, it can be seen that in step 17-1, anFFP programming step is initiated by the user. Once programming has beeninitiated, the user identifies the protocol fields of the packet whichare to be of interest for the filter, in step 17-2. In step 17-3, thepacket type and filter conditions are determined, and in step 17-4, afilter mask is constructed based upon the identified packet type, andthe desired filter conditions. The filter mask is essentially a bit mapwhich is applied or ANDed with selected fields of the packet. After thefilter mask is constructed, it is then determined whether the filterwill be an inclusive or exclusive filter, depending upon the problemswhich are sought to be solved, the packets which are sought to beforwarded, actions sought to be taken, etc. In step 17-6, it isdetermined whether or not the filter is on the ingress port, and in step17-7, it is determined whether or not the filter is on the egress port.If the filter is on the ingress port, an ingress port mask is used instep 17-8. If it is determined that the filter will be on the egressport, then an egress mask is used in step 17-9. Based upon these steps,a rules table entry for rules tables 22 is then constructed, and theentry or entries are placed into the appropriate rules table (steps17-10 and 17-11). These steps are taken through the user inputtingparticular sets of rules and information into CPU 52 by an appropriateinput device, and CPU 52 taking the appropriate action with respect tocreating the filters, through CMIC 40 and the appropriate ingress oregress submodules on an appropriate EPIC module 20 or GPIC module 30.

It should also be noted that the block diagram of SOC 10 in FIG. 2illustrates each GPIC 30 having its own ARL/L3 tables 31, rules table32, and VLAN tables 33, and also each EPIC 20 also having its own ARL/L3tables 21, rules table 22, and VLAN tables 23. In a preferred embodimentof the invention, however, two separate modules can share a commonARL/L3 table and a common VLAN table. Each module, however, has its ownrules table 22. For example, therefore, GPIC 30 a may share ARL/L3 table21 a and VLAN table 23 a with EPIC 20 a. Similarly, GPIC 30 b may shareARL table 21 b and VLAN table 23 b with EPIC 20 b. This sharing oftables reduces the number of gates which are required to implement theinvention, and makes for simplified lookup and synchronization as willbe discussed below.

Table Synchronization and Aging

SOC 10 utilizes a unique method of table synchronization and aging, toensure that only current and active address information is maintained inthe tables. When ARL/L3 tables are updated to include a new sourceaddress, a “hit bit” is set within the table of the “owner” or obtainingmodule to indicate that the address has been accessed. Also, when a newaddress is learned and placed in the ARL table, an S channel message isplaced on S channel 83 as an ARL insert message, instructing all ARL/L3tables on SOC 10 to learn this new address. The entry in the ARL/L3tables includes an identification of the port which initially receivedthe packet and learned the address. Therefore, if EPIC 20 a contains theport which initially received the packet and therefore which initiallylearned the address, EPIC 20 a becomes the “owner” of the address. OnlyEPIC 20 a, therefore, can delete this address from the table. The ARLinsert message is received by all of the modules, and the address isadded into all of the ARL/L3 tables on SOC 10. CMIC 40 will also sendthe address information to CPU 52. When each module receives and learnsthe address information, an acknowledge or ACK message is sent back toEPIC 20 a; as the owner further ARL insert messages cannot be sent fromEPIC 20 a until all ACK messages have been received from all of themodules. In a preferred embodiment of the invention, CMIC 40 does notsend an ACK message, since CMIC 40 does not include ingress/egressmodules thereupon, but only communicates with CPU 52. If multiple SOC 10are provided in a stacked configuration, all ARL/L3 tables would besynchronized due to the fact that CPS channel 80 would be sharedthroughout the stacked modules.

Referring to FIG. 18, the ARL aging process is discussed. An age timeris provided within each EPIC module 20 and GPIC module 30, at step 18-1,it is determined whether the age timer has expired. If the timer hasexpired, the aging process begins by examining the first entry in ARLtable 21. At step 18-2, it is determined whether or not the portreferred to in the ARL entry belongs to the particular module. If theanswer is no, the process proceeds to step 18-3, where it is determinedwhether or not this entry is the last entry in the table. If the answeris yes at step 18-3, the age timer is restarted and the process iscompleted at step 184. If this is not the last entry in the table, thenthe process is returned to the next ARL entry at step 18-5. If, however,at step 18-2 it is determined that the port does belong to thisparticular module, then, at step 18-6 it is determined whether or notthe hit bit is set, or if this is a static entry. If the hit bit is set,the hit bit is reset at step 18-7, and the method then proceeds to step18-3. If the hit bit is not set, the ARL entry is deleted at step 18-8,and a delete ARL entry message is sent on the CPS channel to the othermodules, including CMIC 40, so that the table can be appropriatelysynchronized as noted above. This aging process can be performed on theARL (layer two) entries, as well as layer three entries, in order toensure that aged packets are appropriately deleted from the tables bythe owners of the entries. As noted previously, the aging process isonly performed on entries where the port referred to belongs to theparticular module which is performing the aging process. To this end,therefore, the hit bit is only set in the owner module. The hit bit isnot set for entries in tables of other modules which receive the ARLinsert message. The hit bit is therefore always set to zero in thesynchronized non-owner tables.

The purpose of the source and destination searches, and the overalllookups, is to identify the port number within SOC 10 to which thepacket should be directed to after it is placed either CBP 50 or GBP 60.Of course, a source lookup failure results in learning of the sourcefrom the source MAC address information in the packet; a destinationlookup failure, however, since no port would be identified, results inthe packet being sent to all ports on SOC 10. As long as the destinationVLAN ID is the same as the source VLAN ID, the packet will propagate theVLAN and reach the ultimate destination, at which point anacknowledgment packet will be received, thereby enabling the ARL tableto learn the destination port for use on subsequent packets. If the VLANIDs are different, an L3 lookup and learning process will be performed,as discussed previously. It should be noted that each EPIC and each GPICcontains a FIFO queue to store ARL insert messages, since, although eachmodule can only send one message at a time, if each module sends aninsert message, a queue must be provided for appropriate handling of themessages.

Port Movement

After the ARL/L3 tables have entries in them, the situation sometimesarises where a particular user or station may change location from oneport to another port. In order to prevent transmission errors,therefore, SOC 10 includes capabilities of identifying such movement,and updating the table entries appropriately. For example, if station A,located for example on port 1, seeks to communicate with station B,whose entries indicate that user B is located on port 26. If station Bis then moved to a different port, for example, port 15, a destinationlookup failure will occur and the packet will be sent to all ports. Whenthe packet is received by station B at port 15, station B will send anacknowledge (ACK) message, which will be received by the ingress of theEPIC/GPIC module containing port 1 thereupon. A source lookup (of theacknowledge message) will yield a match on the source address, but theport information will not match. The EPIC/GPIC which receives the packetfrom B, therefore, must delete the old entry from the ARL/L3 table, andalso send an ARL/L3 delete message onto the S channel so that all tablesare synchronized. Then, the new source information, with the correctport, is inserted into the ARL/L3 table, and an ARL/L3 insert message isplaced on the S channel, thereby synchronizing the ARL/L3 tables withthe new information. The updated ARL insert message cannot be sent untilall of the acknowledgment messages are sent regarding the ARL deletemessage, to ensure proper table synchronization. As stated previously,typical ARL insertion and deletion commands can only be initiated by theowner module. In the case of port movement, however, since port movementmay be identified by any module sending a packet to a moved port, theport movement-related deletion and insertion messages can be initiatedby any module.

Trunking

During the configuration process wherein a local area network isconfigured by an administrator with a plurality of switches, etc.,numerous ports can be “trunked” to increase bandwidth. For example, iftraffic between a first switch SW1 and a second switch SW2 isanticipated as being high, the LAN can be configured such that aplurality of ports, for example ports 1 and 2, can be connectedtogether. In a 100 megabits per second environment, the trunking of twoports effectively provides an increased bandwidth of 200 megabits persecond between the two ports. The two ports 1 and 2, are thereforeidentified as a trunk group, and CPU 52 is used to properly configurethe handling of the trunk group. Once a trunk group is identified, it istreated as a plurality of ports acting as one logical port. FIG. 19illustrates a configuration wherein SW1, containing a plurality of portsthereon, has a trunk group with ports 1 and 2 of SW2, with the trunkgroup being two communication lines connecting ports 1 and 2 of each ofSW1 and SW2. This forms trunk group T. In this example, station A,connected to port 3 of SW1, is seeking to communicate or send a packetto station B, located on port 26 of switch SW2. The packet must travel,therefore, through trunk group T from port 3 of SW1 to port 26 of SW2.It should be noted that the trunk group could include any of a number ofports between the switches. As traffic flow increases between SW1 andSW2, trunk group T could be reconfigured by the administrator to includemore ports, thereby effectively increasing bandwidth. In addition toproviding increased bandwidth, trunking provides redundancy in the eventof a failure of one of the links between the switches. Once the trunkgroup is created, a user programs SOC 10 through CPU 52 to recognize theappropriate trunk group or trunk groups, with trunk group identification(TGID) information. A trunk group port bit map is prepared for eachTGID; and a trunk group table, provided for each module on SOC 10, isused to implement the trunk group, which can also be called a portbundle. A trunk group bit map table is also provided. These two tablesare provided on a per module basis, and, like tables 21, 22, and 23, areimplemented in silicon as two-dimensional arrays. In one embodiment ofSOC 10, six trunk groups can be supported, with each trunk group havingup to eight trunk ports thereupon. For communication, however, in orderto prevent out-of-ordering of packets or frames, the same port must beused for packet flow. Identification of which port will be used forcommunication is based upon any of the following: source MAC address,destination MAC address, source IP address, destination IP address, orcombinations of source and destination addresses. If source MAC is used,as an example, if station A on port 3 of SW1 is seeking to send a packetto station B on port 26 of SW2, then the last three bits of the sourceMAC address of station A, which are in the source address field of thepacket, are used to generate a trunk port index. The trunk port index,which is then looked up on the trunk group table by the ingresssubmodule 14 of the particular port on the switch, in order to determinewhich port of the trunk group will be used for the communication. Inother words, when a packet is sought to be sent from station A tostation B, address resolution is conducted as set forth above. If thepacket is to be handled through a trunk group, then a T bit will be setin the ARL entry which is matched by the destination address. If the Tbit or trunk bit is set, then the destination address is learned fromone of the trunk ports. The egress port, therefore, is not learned fromthe port number obtained in the ARL entry, but is instead learned fromthe trunk group ID and rules tag (RTAG) which is picked up from the ARLentry, and which can be used to identify the trunk port based upon thetrunk port index contained in the trunk group table. The RTAG and TGIDwhich are contained in the ARL entry therefore define which part of thepacket is used to generate the trunk port index. For example, if theRTAG value is 1, then the last three bits of the source MAC address areused to identify the trunk port index; using the trunk group table, thetrunk port index can then be used to identify the appropriate trunk portfor communication. If the RTAG value is 2, then it is the last threebits of the destination MAC address which are used to generate the trunkport index. If the RTAG is 3, then the last three bits of the source MACaddress are XORED with the last three bits of the destination MACaddress. The result of this operation is used to generate the trunk portindex. For IP packets, additional RTAG values are used so that thesource IP and destination IP addresses are used for the trunk portindex, rather than the MAC addresses. SOC 10 is configured such that ifa trunk port goes down or fails for any reason, notification is sentthrough CMIC 40 to CPU 52. CPU 52 is then configured to automaticallyreview the trunk group table, and VLAN tables to make sure that theappropriate port bit maps are changed to reflect the fact that a porthas gone down and is therefore removed. Similarly, when the trunk portor link is reestablished, the process has to be reversed and a messagemust be sent to CPU 52 so that the VLAN tables, trunk group tables, etc.can be updated to reflect the presence of the trunk port.

Furthermore, it should be noted that since the trunk group is treated asa single logical link, the trunk group is configured to accept controlframes or control packets, also known as BPDUs, only one of the trunkports. The port based VLAN table, therefore, must be configured toreject incoming BPDUs of non-specified trunk ports. This rejection canbe easily set by the setting of a B bit in the VLAN table. IEEE standard802.1d defines an algorithm known as the spanning tree algorithm, foravoiding data loops in switches where trunk groups exist. Referring toFIG. 19, a logical loop could exist between ports 1 and 2 and switchesSW1 and SW2. The spanning algorithm tree defines four separate states,with these states including disabling, blocking, listening, learning,and forwarding. The port based VLAN table is configured to enable CPU 52to program the ports for a specific ARL state, so that the ARL logictakes the appropriate action on the incoming packets. As notedpreviously, the B bit in the VLAN table provides the capability toreject BPDUs. The St bit in the ARL table enables the CPU to learn thestatic entries; as noted in FIG. 18, static entries are not aged by theaging process. The hit bit in the ARL table, as mentioned previously,enables the ARL engine 143 to detect whether or not there was a hit onthis entry. In other words, SOC 10 utilizes a unique configuration ofARL tables, VLAN tables, modules, etc. in order to provide an efficientsilicon based implementation of the spanning tree states.

In certain situations, such as a destination lookup failure (DLF) wherea packet is sent to all ports on a VLAN, or a multicast packet, thetrunk group bit map table is configured to pickup appropriate portinformation so that the packet is not sent back to the members of thesame source trunk group. This prevents unnecessary traffic on the LAN,and maintains the efficiency at the trunk group.

IP/IPX

Referring again to FIG. 14, each EPIC 20 or GPIC 30 can be configured toenable support of both IP and IPX protocol at linespeed. Thisflexibility is provided without having any negative effect on systemperformance, and utilizes a table, implemented in silicon, which can beselected for IP protocol, IPX protocol, or a combination of IP protocoland IPX protocol. This capability is provided within logic circuitry1411, and utilizes an IP longest prefix cache lookup (IP_LPC), and anIPX longest prefix cache lookup (IPX_LPC). During the layer 3 lookup, anumber of concurrent searches are performed; an L3 fast lookup, and theIP longest prefix cache lookup, are concurrently performed if the packetis identified by the packet header as an IP packet. If the packet headeridentifies the packet as an IPX packet, the L3 fast lookup and the IPXlongest prefix cache lookup will be concurrently performed. It should benoted that ARL/L3 tables 21/31 include an IP default router table whichis utilized for an IP longest prefix cache lookup when the packet isidentified as an IP packet, and also includes an IPX default routertable which is utilized when the packet header identifies the packet asan IPX packet. Appropriate hexadecimal codes are used to determine thepacket types. If the packet is identified as neither an IP packet nor anIPX packet, the packet is directed to CPU 52 via CPS channel 80 and CMIC40. It should be noted that if the packet is identified as an IPXpacket, it could be any one of four types of IPX packets. The four typesare Ethernet 802.3, Ethernet 802.2, Ethernet SNAP, and Ethernet II.

The concurrent lookup of L3 and either IP or IPX are important to theperformance of SOC 10. In one embodiment of SOC 10, the L3 table wouldinclude a portion which has IP address information, and another portionwhich has IPX information, as the default router tables. These defaultrouter tables, as noted previously, are searched depending upon whetherthe packet is an IP packet or an IPX packet. In order to more clearlyillustrate the tables, the L3 table format for an L3 table within ARL/L3tables 21 is as follows:

-   -   IP or IPX Address—32 bits long—IP or IPX Address—is a 32 bit IP        or IPX Address. The Destination IP or IPX Address in a packet is        used as a key in searching this table.    -   Mac Address—48 bits long—Mac Address is really the next Hop Mac        Address. This Mac address is used as the Destination Mac Address        in the forwarded IP Packet.    -   Port Number—6 bits long—Port Number—is the port number the        packet has to go out if the Destination IP Address matches this        entry's IP Address.    -   L3 Interface Num—5 bits long—L3 Interface Num—This L3 Interface        Number is used to get the Router Mac Address from the L3        Interface Table.    -   L3 Hit Bit—1 bit long—L3 Hit bit—is used to check if there is        hit on this Entry. The hit bit is set when the Source IP Address        search matches this entry. The L3 Aging Process ages the entry        if this bit is not set.    -   Frame Type—2 bits long—Frame Type indicates type of IPX Frame        (802.2, Ethernet II, SNAP and 802.3) accepted by this IPX Node.        Value 00—Ethernet II Frame. Value 01—SNAP Frame. Value 02—802.2        Frame. Value 03-802.3 Frame.    -   Reserved—4 bits long—Reserved for future use.

The fields of the default IP router table are as follows:

-   -   IP Subnet Address—32 bits long—IP Subnet Address—is a 32 bit IP        Address of the Subnet.    -   Mac Address—48 bits long—Mac Address is really the next Hop Mac        Address and in this case is the Mac Address of the default        Router.    -   Port Number—6 bits long—Port Number is the port number forwarded        packet has to go out.    -   L3 Interface Num—5 bits long—L3 Interface Num is L3 Interface        Number.    -   IP Subnet Bits—5 bits long—IP Subnet Bits is total number of        Subnet Bits in the Subnet Mask. These bits are ANDED with        Destination IP Address before comparing with Subnet Address.    -   C Bit—1 bit long—C Bit—If this bit is set then send the packet        to CPU also.

The fields of the default IPX router table within ARL/L3 tables 21 areas follows:

-   -   IPX Subnet Address—32 bits long—IPX Subnet Address is a 32 bit        IPX Address of the Subnet.    -   Mac Address—48 bits long—Mac Address is really the next Hop Mac        Address and in this case is the Mac Address of the default        Router.    -   Port Number—6 bits long—Port Number is the port number forwarded        packet has to go out.    -   L3 Interface Num—5 bits long—L3 Interface Num is L3 Interface        Number.    -   IPX Subnet Bits—5 bits long—IPX Subnet Bits is total number of        Subnet Bits in the Subnet Mask. These bits are ANDED with        Destination IPX Address before comparing with Subnet Address.    -   C Bit—1 bit long—C Bit—If this bit is set then send the packet        to CPU also.

If a match is not found in the L3 table for the destination IP address,longest prefix match in the default IP router fails, then the packet isgiven to the CPU. Similarly, if a match is not found on the L3 table fora destination IPX address, and the longest prefix match in the defaultIPX router fails, then the packet is given to the CPU. The lookups aredone in parallel, but if the destination IP or IPX address is found inthe L3 table, then the results of the default router table lookup areabandoned.

The longest prefix cache lookup, whether it be for IP or IPX, includesrepetitive matching attempts of bits of the IP subnet address. Thelongest prefix match consists of ANDing the destination IP address withthe number of IP or IPX subnet bits and comparing the result with the IPsubnet address. Once a longest prefix match is found, as long as the TTLis not equal to one, then appropriate IP check sums are recalculated,the destination MAC address is replaced with the next hop MAC address,and the source MAC address is replaced with the router MAC address ofthe interface. The VLAN ID is obtained from the L3 interface table, andthe packet is then sent as either tagged or untagged, as appropriate. Ifthe C bit is set, a copy of the packet is sent to the CPU as may benecessary for learning or other CPU-related functions.

It should be noted, therefore, that if a packet arrives destined to aaddress associated with a level 3 interface for a selected VLAN, theingress looks for a match at an IP/IPX destination subnet level. Ifthere is no IP/IPX destination subnet match, the packet is forwarded toCPU 52 for appropriate routing. However, if an IP/IPX match is made,then the MAC address of the next hop and the egress port number isidentified and the packet is appropriately forwarded.

In other words, the ingress of the EPIC 20 or GPIC 30 is configured withrespect to ARL/L3 tables 21 so that when a packet enters ingresssubmodule 14, the ingress can identify whether or not the packet is anIP packet or an IPX packet. IP packets are directed to an IP/ARL lookup,and IPX configured packets are directed to an IPX/ARL lookup. If an L3match is found during the L3 lookup, then the longest prefix matchlookups are abandoned.

HOL Blocking

SOC 10 incorporates some unique data flow characteristics, in ordermaximize efficiency and switching speed. In network communications, aconcept known as head-of-line or HOL blocking occurs when a port isattempting to send a packet to a congested port, and immediately behindthat packet is another packet which is intended to be sent to anun-congested port. The congestion at the destination port of the firstpacket would result in delay of the transfer of the second packet to theun-congested port. Each EPIC 20 and GPIC 30 within SOC 10 includes aunique HOL blocking mechanism in order to maximize throughput andminimize the negative effects that a single congested port would have ontraffic going to un-congested ports. For example, if a port on a GPIC30, with a data rate of, for example, 1000 megabits per second isattempting to send data to another port 24 a on EPIC 20 a, port 24 awould immediately be congested. Each port on each GPIC 30 and EPIC 20 isprogrammed by CPU 52 to have a high watermark and a low watermark perport per class of service (COS), with respect to buffer space within CBP50. The fact that the head of line blocking mechanism enables per portper COS head of line blocking prevention enables a more efficient dataflow than that which is known in the art. When the output queue for aparticular port hits the preprogrammed high watermark within theallocated buffer in CBP 50, PMMU 70 sends, on S channel 83, a COS queuestatus notification to the appropriate ingress module of the appropriateGPIC 30 or EPIC 20. When the message is received, the active portregister corresponding to the COS indicated in the message is updated.If the port bit for that particular port is set to zero, then theingress is configured to drop all packets going to that port. Althoughthe dropped packets will have a negative effect on communication to thecongested port, the dropping of the packets destined for congested portsenables packets going to un-congested ports to be expeditiouslyforwarded thereto. When the output queue goes below the preprogrammedlow watermark, PMMU 70 sends a COS queue status notification message onthe sideband channel with the bit set for the port. When the ingressgets this message, the bit corresponding to the port in the active portregister for the module can send the packet to the appropriate outputqueue. By waiting until the output queue goes below the low watermarkbefore re-activating the port, a hysteresis is built into the system toprevent constant activation and deactivation of the port based upon theforwarding of only one packet, or a small number of packets. It shouldbe noted that every module has an active port register. As an example,each COS per port may have four registers for storing the high watermarkand the low watermark; these registers can store data in terms of numberof cells on the output queue, or in terms of number of packets on theoutput queue. In the case of a unicast message, the packet is merelydropped; in the case of multicast or broadcast messages, the message isdropped with respect to congested ports, but forwarded to uncongestedports. PMMU 70 includes all logic required to implement this mechanismto prevent HOL blocking, with respect to budgeting of cells and packets.PMMU 70 includes an HOL blocking marker register to implement themechanism based upon cells. If the local cell count plus the global cellcount for a particular egress port exceeds the HOL blocking markerregister value, then PMMU 70 sends the HOL status notification message.PMMU 70 can also implement an early HOL notification, through the use ofa bit in the PMMU configuration register which is referred to as a UseAdvanced Warning Bit. If this bit is set, the PMMU 70 sends the HOLnotification message if the local cell count plus the global cell countplus 121 is greater than the value in the HOL blocking marker register.121 is the number of cells in a jumbo frame.

With respect to the hysteresis discussed above, it should be noted thatPMMU 70 implements both a spatial and a temporal hysteresis. When thelocal cell count plus global cell count value goes below the value inthe HOL blocking marker register, then a poaching timer value from aPMMU configuration register is used to load into a counter. The counteris decremented every 32 clock cycles. When the counter reaches 0, PMMU70 sends the HOL status message with the new port bit map. The bitcorresponding to the egress port is reset to 0, to indicate that thereis no more HOL blocking on the egress port. In order to carry on HOLblocking prevention based upon packets, a skid mark value is defined inthe PMMU configuration register. If the number of transaction queueentries plus the skid mark value is greater than the maximum transactionqueue size per COS, then PMMU 70 sends the COS queue status message onthe S channel. Once the ingress port receives this message, the ingressport will stop sending packets for this particular port and COScombination. Depending upon the configuration and the packet lengthreceived for the egress port, either the head of line blocking for thecell high watermark or the head of line blocking for the packet highwatermark may be reached first. This configuration, therefore, works toprevent either a small series of very large packets or a large series ofvery small packets from creating HOL blocking problems.

The low watermark discussed previously with respect to CBP admissionlogic is for the purpose of ensuring that independent of trafficconditions, each port will have appropriate buffer space allocated inthe CBP to prevent port starvation, and ensure that each port will beable to communicate with every other port to the extent that the networkcan support such communication.

Referring again to PMMU 70 illustrated in FIG. 10, CBM 71 is configuredto maximize availability of address pointers associated with incomingpackets from a free address pool. CBM 71, as noted previously, storesthe first cell pointer until incoming packet 112 is received andassembled either in CBP 50, or GBP 60. If the purge flag of thecorresponding P channel message is set, CBM 71 purges the incoming datapacket 112, and therefore makes the address pointers GPID/CPIDassociated with the incoming packet to be available. When the purge flagis set, therefore, CBM 71 essentially flushes or purges the packet fromprocessing of SOC 10, thereby preventing subsequent communication withthe associated egress manager 76 associated with the purged packet. CBM71 is also configured to communicate with egress managers 76 to deleteaged and congested packets. Aged and congested packets are directed toCBM 71 based upon the associated starting address pointer, and thereclaim unit within CBM 71 frees the pointers associated with thepackets to be deleted; this is, essentially, accomplished by modifyingthe free address pool to reflect this change. The memory budget value isupdated by decrementing the current value of the associated memory bythe number of data cells which are purged.

To summarize, resolved packets are placed on C channel 81 by ingresssubmodule 14 as discussed with respect to FIG. 8. CBM 71 interfaces withthe CPS channel, and every time there is a cell/packet addressed to anegress port, CBM 71 assigns cell pointers, and manages the linked list.A plurality of concurrent reassembly engines are provided, with onereassembly engine for each egress manager 76, and tracks the framestatus. Once a plurality of cells representing a packet is fully writteninto CBP 50, CBM 71 sends out CPIDs to the respective egress managers,as discussed above. The CPIDs point to the first cell of the packet inthe CBP; packet flow is then controlled by egress managers 76 totransaction MACs 140 once the CPID/GPID assignment is completed by CBM71. The budget register (not shown) of the respective egress manager 76is appropriately decremented by the number of cells associated with theegress, after the complete packet is written into the CBP 50. EGM 76writes the appropriate PIDs into its transaction FIFO. Since there aremultiple classes of service (COSs), then the egress manager 76 writesthe PIDs into the selected transaction FIFO corresponding to theselected COS. As will be discussed below with respect to FIG. 13, eachegress manager 76 has its own scheduler interfacing to the transactionpool or transaction FIFO on one side, and the packet pool or packet FIFOon the other side. The transaction FIFO includes all PIDs, and thepacket pool or packet FIFO includes only CPIDs. The packet FIFOinterfaces to the transaction FIFO, and initiates transmission basedupon requests from the transmission MAC. Once transmission is started,data is read from CBP 50 one cell at a time, based upon transaction FIFOrequests.

As noted previously, there is one egress manager for each port of everyEPIC 20 and GPIC 30, and is associated with egress sub-module 18. FIG.13 illustrates a block diagram of an egress manager 76 communicatingwith R channel 77. For each data packet 112 received by an ingresssubmodule 14 of an EPIC 20 of SOC 10, CBM 71 assigns a PointerIdentification (PID); if the packet 112 is admitted to CBP 50, the CBM71 assigns a CPID, and if the packet 112 is admitted to GBP 60, the CBM71 assigns a GPID number. At this time, CBM 71 notifies thecorresponding egress manager 76 which will handle the packet 112, andpasses the PID to the corresponding egress manager 76 through R channel77. In the case of a unicast packet, only one egress manager 76 wouldreceive the PID. However, if the incoming packet were a multicast orbroadcast packet, each egress manager 76 to which the packet is directedwill receive the PID. For this reason, a multicast or broadcast packetneeds only to be stored once in the appropriate memory, be it either CBP50 or GBP 60.

Each egress manager 76 includes an R channel interface unit (RCIF) 131,a transaction FIFO 132, a COS manager 133, a scheduler 134, anaccelerated packet flush unit (APF) 135, a memory read unit (MRU) 136, atime stamp check unit (TCU) 137, and an untag unit 138. MRU 136communicates with CMC 79, which is connected to CBP 50. Scheduler 134 isconnected to a packet FIFO 139. RCIF 131 handles all messages betweenCBM 71 and egress manager 76. When a packet 112 is received and storedin SOC 10, CBM 71 passes the packet information to RCIF 131 of theassociated egress manager 76. The packet information will include anindication of whether or not the packet is stored in CBP 50 or GBP 70,the size of the packet, and the PID. RCIF 131 then passes the receivedpacket information to transaction FIFO 132. Transaction FIFO 132 is afixed depth FIFO with eight COS priority queues, and is arranged as amatrix with a number of rows and columns. Each column of transactionFIFO 132 represents a class of service (COS), and the total number ofrows equals the number of transactions allowed for any one class ofservice. COS manager 133 works in conjunction with scheduler 134 inorder to provide policy based quality of service (QOS), based uponethernet standards. As data packets arrive in one or more of the COSpriority queues of transaction FIFO 132, scheduler 134 directs aselected packet pointer from one of the priority queues to the packetFIFO 139. The selection of the packet pointer is based upon a queuescheduling algorithm, which is programmed by a user through CPU 52,within COS manager 133. An example of a COS issue is video, whichrequires greater bandwidth than text documents. A data packet 112 ofvideo information may therefore be passed to packet FIFO 139 ahead of apacket associated with a text document. The COS manager 133 wouldtherefore direct scheduler 134 to select the packet pointer associatedwith the packet of video data.

The COS manager 133 can also be programmed using a strict priority basedscheduling method, or a weighted priority based scheduling method ofselecting the next packet pointer in transaction FIFO 132. Utilizing astrict priority based scheduling method, each of the eight COS priorityqueues are provided with a priority with respect to each other COSqueue. Any packets residing in the highest priority COS queue areextracted from transaction FIFO 132 for transmission. On the other hand,utilizing a weighted priority based scheduling scheme, each COS priorityqueue is provided with a programmable bandwidth. After assigning thequeue priority of each COS queue, each COS priority queue is given aminimum and a maximum bandwidth. The minimum and maximum bandwidthvalues are user programmable. Once the higher priority queues achievetheir minimum bandwidth value, COS manager 133 allocates any remainingbandwidth based upon any occurrence of exceeding the maximum bandwidthfor any one priority queue. This configuration guarantees that a maximumbandwidth will be achieved by the high priority queues, while the lowerpriority queues are provided with a lower bandwidth.

The programmable nature of the COS manager enables the schedulingalgorithm to be modified based upon a user's specific needs. Forexample, COS manager 133 can consider a maximum packet delay value whichmust be met by a transaction FIFO queue. In other words, COS manager 133can require that a packet 112 is not delayed in transmission by themaximum packet delay value; this ensures that the data flow of highspeed data such as audio, video, and other real time data iscontinuously and smoothly transmitted.

If the requested packet is located in CBP 50, the CPID is passed fromtransaction FIFO 132 to packet FIFO 139. If the requested packet islocated in GBP 60, the scheduler initiates a fetch of the packet fromGBP 60 to CBP 50; packet FIFO 139 only utilizes valid CPID information,and does not utilize GPID information. The packet FIFO 139 onlycommunicates with the CBP and not the GBP. When the egress seeks toretrieve a packet, the packet can only be retrieved from the CBP; forthis reason, if the requested packet is located in the GBP 60, thescheduler fetches the packet so that the egress can properly retrievethe packet from the CBP.

APF 135 monitors the status of packet FIFO 139. After packet FIFO 139 isfull for a specified time period, APF 135 flushes out the packet FIFO.The CBM reclaim unit is provided with the packet pointers stored inpacket FIFO 139 by APF 135, and the reclaim unit is instructed by APF135 to release the packet pointers as part of the free address pool. APF135 also disables the ingress port 21 associated with the egress manager76.

While packet FIFO 139 receives the packet pointers from scheduler 134,MRU 136 extracts the packet pointers for dispatch to the proper egressport. After MRU 136 receives the packet pointer, it passes the packetpointer information to CMC 79, which retrieves each data cell from CBP50. MRU 136 passes the first data cell 112 a, incorporating cell headerinformation, to TCU 137 and untag unit 138. TCU 137 determines whetherthe packet has aged by comparing the time stamps stored within data cell112 a and the current time. If the storage time is greater than aprogrammable discard time, then packet 112 is discarded as an agedpacket. Additionally, if there is a pending request to untag the datacell 112 a, untag unit 138 will remove the tag header prior todispatching the packet. Tag headers are defined in IEEE Standard 802.1q.

Egress manager 76, through MRU 136, interfaces with transmission FIFO140, which is a transmission FIFO for an appropriate media accesscontroller (MAC); media access controllers are known in the ethernetart. MRU 136 prefetches the data packet 112 from the appropriate memory,and sends the packet to transmission FIFO 140, flagging the beginningand the ending of the packet. If necessary, transmission FIFO 140 willpad the packet so that the packet is 64 bytes in length.

As shown in FIG. 9, packet 112 is sliced or segmented into a pluralityof 64 byte data cells for handling within SOC 10. The segmentation ofpackets into cells simplifies handling thereof, and improvesgranularity, as well as making it simpler to adapt SOC 10 to cell-basedprotocols such as ATM. However, before the cells are transmitted out ofSOC 10, they must be reassembled into packet format for propercommunication in accordance with the appropriate communication protocol.A cell reassembly engine (not shown) is incorporated within each egressof SOC 10 to reassemble the sliced cells 112 a and 112 b into anappropriately processed and massaged packet for further communication.

FIG. 16 is a block diagram showing some of the elements of CPU interfaceor CMIC 40. In a preferred embodiment, CMIC 40 provides a 32 bit 66 MHZPCI interface, as well as an I2C interface between SOC 10 and externalCPU 52. PCI communication is controlled by PCI core 41, and I2Ccommunication is performed by I2C core 42, through CMIC bus 167. Asshown in the figure, many CMIC 40 elements communicate with each otherthrough CMIC bus 167. The PCI interface is typically used forconfiguration and programming of SOC 10 elements such as rules tables,filter masks, packet handling, etc., as well as moving data to and fromthe CPU or other PCI uplink. The PCI interface is suitable for high endsystems wherein CPU 52 is a powerful CPU and running a sufficientprotocol stack as required to support layer two and layer threeswitching functions. The I2C interface is suitable for low end systems,where CPU 52 is primarily used for initialization. Low end systems wouldseldom change the configuration of SOC 10 after the switch is up andrunning.

CPU 52 is treated by SOC 10 as any other port. Therefore, CMIC 40 mustprovide necessary port functions much like other port functions definedabove. CMIC 40 supports all S channel commands and messages, therebyenabling CPU 52 to access the entire packet memory and register set;this also enables CPU 52 to issue insert and delete entries into ARL/L3tables, issue initialize CFAP/SFAP commands, read/write memory commandsand ACKs, read/write register command and ACKs, etc. Internal to SOC 10,CMIC 40 interfaces to C channel 81, P channel 82, and S channel 83, andis capable of acting as an S channel master as well as S channel slave.To this end, CPU 52 must read or write 32-bit D words. For ARL tableinsertion and deletion, CMIC 40 supports buffering of four insert/deletemessages which can be polled or interrupt driven. ARL messages can alsobe placed directly into CPU memory through a DMA access using an ARL DMAcontroller 161. DMA controller 161 can interrupt CPU 52 after transferof any ARL message, or when all the requested ARL packets have beenplaced into CPU memory.

Communication between CMIC 40 and C channel 81/P channel 82 is performedthrough the use of CP-channel buffers 162 for buffering C and P channelmessages, and CP bus interface 163. S channel ARL message buffers 164and S channel bus interface 165 enable communication with S channel 83.As noted previously, PIO (Programmed Input/Output) registers are used,as illustrated by SCH PIO registers 166 and PIO registers 168, to accessthe S channel, as well as to program other control, status, address, anddata registers. PIO registers 168 communicate with CMIC bus 167 throughI2C slave interface 42 a and I2C master interface 42 b. DMA controller161 enables chaining, in memory, thereby allowing CPU 52 to transfermultiple packets of data without continuous CPU intervention. Each DMAchannel can therefore be programmed to perform a read or write DMAoperation. Specific descriptor formats may be selected as appropriate toexecute a desired DMA function according to application rules. Forreceiving cells from PMMU 70 for transfer to memory, if appropriate,CMIC 40 acts as an egress port, and follows egress protocol as discussedpreviously. For transferring cells to PMMU 70, CMIC 40 acts as aningress port, and follows ingress protocol as discussed previously. CMIC40 checks for active ports, COS queue availability and other ingressfunctions, as well as supporting the HOL blocking mechanism discussedabove. CMIC 40 supports single and burst PIO operations; however, burstshould be limited to S channel buffers and ARL insert/delete messagebuffers. Referring once again to I2C slave interface 42 a, the CMIC 40is configured to have an I2C slave address so that an external I2Cmaster can access registers of CMIC 40. CMIC 40 can inversely operate asan I2C master, and therefore, access other I2C slaves. It should benoted that CMIC 40 can also support MIIM through MIIM interface 169.MIIM support is defined by IEEE Standard 802.3u, and will not be furtherdiscussed herein. Similarly, other operational aspects of CMIC 40 areoutside of the scope of this invention.

A unique and advantageous aspect of SOC 10 is the ability of doingconcurrent lookups with respect to layer two (ARL), layer three, andfiltering. When an incoming packet comes in to an ingress submodule 14of either an EPIC 20 or a GPIC 30, as discussed previously, the moduleis capable of concurrently performing an address lookup to determine ifthe destination address is within a same VLAN as a source address; ifthe VLAN IDs are the same, layer 2 or ARL lookup should be sufficient toproperly switch the packet in a store and forward configuration. If theVLAN IDs are different, then layer three switching must occur based uponappropriate identification of the destination address, and switching toan appropriate port to get to the VLAN of the destination address. Layerthree switching, therefore, must be performed in order to cross VLANboundaries. Once SOC 10 determines that L3 switching is necessary, SOC10 identifies the MAC address of a destination router, based upon the L3lookup. L3 lookup is determined based upon a reading in the beginningportion of the packet of whether or not the L3 bit is set. If the L3 bitis set, then L3 lookup will be necessary in order to identifyappropriate routing instructions. If the lookup is unsuccessful, arequest is sent to CPU 52 and CPU 52 takes appropriate steps to identifyappropriate routing for the packet. Once the CPU has obtained theappropriate routing information, the information is stored in the L3lookup table, and for the next packet, the lookup will be successful andthe packet will be switched in the store and forward configuration.

Thus, the present invention comprises a method for allocating memorylocations of a network switch. The network switch has internal (on-chip)memory and an external (off-chip) memory. Memory locations are allocatedbetween the internal memory and the external memory according to apre-defined algorithm.

The pre-defined algorithm allocates memory locations between theinternal memory and the external memory based upon the amount ofinternal memory available for the egress port of the network switch fromwhich the data packet is to be transmitted by the network switch. Whenthe internal memory available for the egress port from which the datapacket is to be transmitted is above a predetermined threshold, then thedata packet is stored in the internal memory. When the internal memoryavailable for the egress port from which the data packet is to betransmitted is below the predetermined threshold value, then the datapacket is stored in the external memory.

Thus, this distributed hierarchical shared memory architecture defines aself-balancing mechanism. That is, for egress ports having few datapackets in their egress queues, the incoming data packets which are tobe switched to these egress ports are sent to the internal memory,whereas for egress ports having many data packets in their egressqueues, the incoming data packets which are to be switched to theseegress ports are stored in the external memory.

Preferably, any data packets which are stored in external memory aresubsequently re-routed back to the internal memory before being providedto an egress port for transmission from the network switch.

Thus, according to the present invention, the transmission line rate ismaintained on each egress port even though the architecture utilizesslower speed DRAMs for at least a portion of packet storage. Preferably,this distributed hierarchical shared memory architecture uses SRAM as apacket memory cache or internal memory and uses standard DRAMs or SDRAMsas an external memory, so as to provide a desired cost-benefit ratio.

The above-discussed configuration of the invention is, in a preferredembodiment, embodied on a semiconductor substrate, such as silicon, withappropriate semiconductor manufacturing techniques and based upon acircuit layout which would, based upon the embodiments discussed above,be apparent to those skilled in the art. A person of skill in the artwith respect to semiconductor design and manufacturing would be able toimplement the various modules, interfaces, and tables, buffers, etc. ofthe present invention onto a single semiconductor substrate, based uponthe architectural description discussed above. It would also be withinthe scope of the invention to implement the disclosed elements of theinvention in discrete electronic components, thereby taking advantage ofthe functional aspects of the invention without maximizing theadvantages through the use of a single semiconductor substrate.

The preceding discussion of a specific network switch is provided for abetter understanding of the discussion of the stacked configurations aswill follow. It will be known to a person of ordinary skill in the art,however, that the inventions discussed herein with respect to stackingconfigurations are not limited to the particular switch configurationsdiscussed above.

FIG. 20 illustrates a configuration where a plurality of SOCs 10(1) . .. 10(n) are connected by interstack connection I. SOCs 10(1)-10(n)include the elements which are illustrated in FIG. 2. FIG. 20schematically illustrates CVP 50, MMU 70, EPICs 20 and GPICs 30 of eachSOC 10. Interstack connection I is used to provide a stackingconfiguration between the switches, and can utilize, as an example, atleast one gigabit uplink or other ports of each switch to provide asimplex or duplex stacking configuration as will be discussed below.FIG. 2 illustrates a configuration wherein a plurality of SOCs10(1)-10(4) are connected in a cascade configuration using GPIC modules30 to create a stack. Using an example where each SOC 10 contains 24 lowspeed ethernet ports having a maximum speed of 100 Megabits per second,and two gigabit ports. The configuration of FIG. 21, therefore, resultsin 96 ethernet ports and 4 usable gigabit ports, with four other gigabitports being used to link the stack as what is called a stacked link.Interconnection as shown in FIG. 21 results in what is referred to as asimplex ring, enabling unidirectional communication at a rate of one-twogigabits per second. All of the ports of the stack may be on the sameVLAN, or a plurality of VLANs may be present on the stack. MultipleVLANs can be present on the same switch. The VLAN configurations aredetermined by the user, depending upon network requirements. This istrue for all SOC 10 switch configurations. It should be noted, however,that these particular configurations used as examples only, and are notintended to limit the scope of the claimed invention.

FIG. 22 illustrates a second configuration of four stacked SOC 10switches, SOC 10(1) . . . 10(4). However, any number of switches couldbe stacked in this manner. The configuration of FIG. 22 utilizesbi-directional gigabit links to create a full duplex configuration. Theutilization of bidirectional gigabit links, therefore, eliminates theavailability of a gigabit uplink for each SOC 10 unless additional GPICmodules are provided in the switch. The only available gigabit uplinksfor the stack, therefore, are one gigabit port at each of the endmodules. In this example, therefore, 96 low speed ethernet ports and 2gigabit ethernet ports are provided.

FIG. 23 illustrates a third configuration for stacking four SOC 10switches. In this configuration, the interconnection is similar to theconfiguration of FIG. 22, except that the two gigabit ports at the endmodules are connected as a passive link, thereby providing redundancy. Apassive link in this configuration is referred to in this manner sincethe spanning tree protocol discussed previously is capable of puttingthis link in a blocking mode, thereby preventing looping of packets. Atrade-off in this blocking mode, however, is that no gigabit uplinks areavailable unless an additional GPIC module 30 is installed in each SOC10. Packet flow, address learning, trunking, and other aspects of thesestacked configurations will now be discussed.

In the embodiment of FIG. 21, as a first example, a series of uniquesteps are taken in order to control packet flow and address learningthroughout the stack. A packet being sent from a source port on one SOC10 to a destination port on another SOC 10 is cascaded in a series ofcomplete store-and-forward steps to reach the destination. The cascadingis accomplished through a series of interstack links or hops 2001, 2002,2003, and 2004, which is one example of an implementation of interstackconnection I. Referring to FIG. 24, packet flow can be analyzed withrespect to a packet coming into stack 2000 on one port, destined foranother port on the stack. In this example, let us assume that stationA, connected to port 1 on SOC 10(1), seeks to send a packet to stationB, located on port 1 of switch SOC 10(3). The packet would come in tothe ingress submodule 14 of SOC 10(1). SOC 10(1) would be configured asa stacked module, to add a stack-specific interstack tag or IS tag intothe packet. The IS tag is, in this example, a four byte tag which isadded into the packet in order to enable packet handling in the stack.It should be noted that, in this configuration of the invention, SOC 10is used as an example of a switch or router which can be stacked in away to utilize the invention. The invention is not limited, however, toswitches having the configuration of SOC 10; other switch configurationsmay be utilized. As discussed previously, SOC 10 slices incoming packetsinto 64 byte cells. Since cell handling is not an aspect of this portionof the invention, the following discussion will be directed solely tothe handling of packets.

FIG. 24A illustrates an example of a data packet 112-S, having a fourbyte interstack tag IS inserted after the VLAN tag. It should be notedthat although interstack tag IS is added after the VLAN tag in thepresent invention, the interstack tag could be effectively addedanywhere in the packet. FIG. 24B illustrates the particular fields of aninterstack tag, as will be discussed below:

-   -   Stack_Cnt—5 bits long—Stack count; describes the number of hops        the packet can go through before it is deleted. The number of        hops is one less than the number of modules in the stack. If the        stack count is zero the packet is dropped. This is to prevent        looping of the packet when there is a DLF. This field is not        used when the stacking mode is full-duplex.    -   SRC_T—1 bit long—If this bit is set, then the source port is        part of a trunk group.    -   SRC_TGID—3 bits long—SRC_TGID identifies the Trunk Group if the        SRC_T bit is set.    -   SRC_RTAG—3 bits long—SRC_RTAG identifies the Trunk Selection for        the source trunk port. This is used to populate the ARL table in        the other modules if the SRC_T bit is set.    -   DST_T—1 bit long—If this bit is set, the destination port is        part of a trunk group.    -   DST_TGID—3 bits long—DST_TGID identifies the Trunk Group if the        DST_T bit is set.    -   DST_RTAG—3 bits long—DST_RTAG identifies the Trunk Selection        Criterion if the DST_T bit is set.    -   PFM—2 bits long—PFM—Port Filtering Mode for port N (ingress        port). Value O—operates in Port Filtering Mode A; Value        1—operates in Port Filtering Mode B (default); and Value        2—operates in Port Filtering Mode C.    -   M—1 bit long—If this bit is set, then this is a mirrored packet.    -   MD—1 bit long—If this bit is set and the M bit is set, then the        packet is sent only to the mirrored-to-port. If this bit is not        set and the M bit is set, then the packet is sent to the        mirrored-to-port as well as the destination port (for ingress        mirroring).    -   Reserved—9 bits long—Reserved for future use.

In the case of SOC 10, if the incoming packet is untagged, the ingresswill also tag the packet with an appropriate VLAN tag. The IS tag isinserted into the packet immediately after the VLAN tag. An appropriatecircuit is provided in each SOC 10 to recognize and provide thenecessary tagging information.

With respect to the specific tag fields, the stack count fieldcorresponds to the number of modules in the stack, and thereforedescribes the number of hops which the packet can go through before itis deleted. The SRC_T tag is the same as the T bit discussed previouslywith respect to ARL tables 21 in SOC 10. If the SRC_T bit is set, thenthe source port is part of a trunk group. Therefore, if the SRC_T bit isset in the IS tag, then the source port has been identified as a trunkport. In summary, therefore, as the packet comes in to SOC 10(1), an ARLtable lookup, on the source lookup, is performed. The status of the Tbit is checked. If it is determined that the source port is a trunkport, certain trunk rules are applied as discussed previously, and aswill be discussed below.

The SRC_TGID field is three bits long, and identifies the trunk group ifthe SRC_T bit has been set. Of course, if the SRC_T bit has not beenset, this field is not used. Similarly, the SRC_RTAG identifies thetrunk selection for the source trunk port, also as discussed previously.The remaining fields in the IS tag are discussed above.

Packet flow within stack 2000 is defined by a number of rules. Addressesare learned as discussed previously, through the occurrence of a sourcelookup failure (SLF). Assuming that the stack is being initialized, andall tables on each of SOC 10(1) . . . SOC 10(4) are empty. A packetbeing sent from station A on port number 1 of SOC 10(1), destined forstation B on port number 1 of SOC 10(3), comes into port number 1 of SOC10(1). When arriving at ingress submodule 14 of SOC 10(1), an interstacktag, having the fields set forth above, is inserted into the packet.Also, if the packet is an untagged packet, a VLAN tag is insertedimmediately before the IS tag. ARL engine 143 of SOC 10(1) reads thepacket, and identifies the appropriate VLAN based upon either the taggedVLAN table 231 or port based VLAN table 232. An ARL table search is thenperformed. Since the ARL tables are empty, a source lookup failure (SLF)occurs. As a result, the source MAC address of station A of the incomingpacket is “learned” and added to the ARL table within ARL/L3 table 21 aof SOC 10(1). Concurrently, a destination search occurs, to see if theMAC address for destination B is located in the ARL table. A destinationlookup failure (DLF) will occur. Upon the occurrence of a DLF, thepacket is flooded to all ports on the associated VLAN to which thesource port belongs. As a result, the packet will be sent to SOC 10(2)on port 26 of SOC 10(1), and thereby received on port 26 of SOC 10(2).The interstack link, which in this case is on port 26, must beconfigured to be a member of that VLAN if the VLAN spans across two ormore switches. Before the packet is sent out from SOC 10(1), the stackcount field of the IS tag is set to three, which is the maximum valuefor a four module stack as illustrated in FIG. 21. For any number ofswitches n, the stack count is initially set to n−1. Upon receipt onport 26 of SOC 10(2) via interconnect 2001, a source lookup is performedby ingress submodule 14 of SOC 10(2). A source lookup failure occurs,and the MAC address for station A is learned on SOC 10(2). The stackcount of the IS tag is decremented by one, and is now 2. A destinationlookup failure occurs on destination lookup, since destination B has notbeen learned on SOC 10(2). The packet is therefore flooded on all portsof the associated VLAN. The packet is then received on port 26 of SOC10(3). On source lookup, a source lookup failure occurs, and the addressis learned in the ARL table of SOC 10(3). The stack count field isdecremented by one, a destination lookup failure occurs, and the packetis flooded to all ports of the associated VLAN. When the packet isflooded to all ports, the packet is received at the destination on portnumber 1 of SOC 10(3). The packet is also sent on the interstack link toport 26 of SOC 10(4). A source lookup failure results in the sourceaddress, which is the MAC address for station A, being learned on theARL table for SOC 10(4). The stack count is decremented by one, therebymaking it zero, and a destination lookup occurs, which results in afailure. The packet is then sent to all ports on the associated VLAN.However, since the stack count is zero, the packet is not sent on theinterstack link. The stack count reaching zero indicates that the packethas looped through the stack once, stopping at each SOC 10 on the stack.Further looping through the stack is thereby prevented.

The following procedure is followed with respect to address learning andpacket flow when station B is the source and is sending a packet tostation A. A packet from station B arrives on port 1 of SOC 10(3).Ingress 14 of SOC 10(3) inserts an appropriate IS tag into the packet.Since station B, formerly the destination, has not yet been learned inthe ARL table of SOC 10(3), a source lookup failure occurs, and the MACaddress for station B is learned on SOC 10(3). The stack count in theinterstack tag, as mentioned previously, is set to three (n−1). Adestination lookup results in a hit, and the packet is switched to port26. For stacked module 10(3), the MAC address for station A has alreadybeen learned and thereby requires switching only to port 26 of SOC10(3). The packet is received at port 26 of SOC 10(4). A source lookupfailure occurs, and the MAC address for station B is learned in the ARLtable of SOC 10(4). The stack count is decremented to two, and thedestination lookup results in the packet being sent out on port 26 ofSOC 10(4). The packet is received on port 26 of SOC 10(1), where asource lookup failure occurs, and the MAC address for station B islearned on the ARL table for SOC 10(1). Stack count is decremented, andthe destination lookup results in the packet being switched to port 1.Station A receives the packet. Since the stack count is still one, thepacket is sent on the stack link to port 26 of SOC 10(2). A sourcelookup failure occurs, and the MAC address for station B is learned onSOC 10(2). Stack count is decremented to zero. A destination lookupresults in a hit, but the packet is not switched to port 26 because thestack count is zero. The MAC addresses for station A and station B havetherefore been learned on each module of the stack. The contents of theARL tables for each of the SOC 10 modules are not identical, however,since the stacking configuration results in SOC 10(2), 10(3), and 10(4)identifying station A as being located on port 26, because that is theport on the particular module to which the packet must be switched inorder to reach station A. In the ARL table for SOC 10(1), however,station A is properly identified as being located on port 1. Similarly,station B is identified as being located on port 26 for each SOC exceptfor SOC 10(3). Since station A is connected to port 1 of SOC 10(3), theARL table for SOC 10(3) properly identifies the particular port on whichthe station is actually located.

After the addresses have been learned in the ARL tables, packet flowfrom station A to station B requires fewer steps, and causes less switchtraffic. A packet destined for station B comes in from station A on portnumber 1 of SOC 10(1). An IS tag is inserted by the ingress. A sourcelookup is a hit because station A has already been learned, stack countis set to three, and the destination lookup results in the packet beingswitched to port 26 of SOC 10(1). SOC 10(2) receives the packet on port26, a source lookup is a hit, stack count is decremented, and adestination lookup results in switching of the packet out to port 26 ofSOC 10(3). SOC 10(3) receives the packet on port 26, source lookup is ahit, stack count is decremented, destination lookup results in a hit,and the packet is switched to port 1 of SOC 10(3), where it is receivedby station B. Since the stack count is decremented for each hop afterthe first hop, it is not yet zero. The packet is then sent to SOC 10(4)on port 26 of SOC 10(3), in accordance with the stack configuration.Source lookup is a hit, stack count is decremented, destination lookupis a hit, but the packet is then dropped by SOC 10(4) since the stackcount is now zero.

It should be noted that in the above discussion, and the followingdiscussions, ingress submodule 14, ARL/3 table 21, and other aspects ofan EPIC 20, as discussed previously, are generally discussed withrespect to a particular SOC 10. It is noted that in configurationswherein SOC 10 s are stacked as illustrated in FIGS. 20-23, ports willbe associated with a particular EPIC 20, and a particular ingresssubmodule, egress submodule, etc. associated with that EPIC will beutilized. In configurations where the stacked switches utilize adifferent switch architecture, the insertion of the interstack tag,address learning, stack count decrement, etc. will be handled byappropriately configured circuits and submodules, as would be apparentto a person of skill in the art based upon the information containedherein.

It should be noted that switches which are stacked in this configurationalso includes a circuit or other means which strips or removes the IStag and the port VLAN ID (if added) from the packet before the packet isswitched out of the stack. The IS tag and the port VLAN ID are importantonly for handling within a stack and/or within the switch.

Aging of ARL entries in a configuration utilizing SOC 10 switches is asdiscussed previously. Each ARL table ages entries independently of eachother. If an entry is deleted from one SOC 10 (tables within each switchare synchronized as discussed above, but not tables within a stack), asource lookup failure will only occur in that switch if a packet isreceived by that switch and the address has already been aged out. Adestination lookup failure, however, may not necessarily occur forpackets arriving on the stack link port; if the DST_T bit is set, adestination lookup failure will not occur. Necessary destinationinformation can be picked up from the DST_TGID and DST_RTAG fields. Ifthe DST_T bit is not set, however, and the address has been deleted oraged out, then a destination lookup failure will occur in the localmodule.

Although aging should be straightforward in view of the above-referenceddiscussion, the following example will presume that the entries forstation A and station B have been deleted from SOC 10(2) due to theaging process. When station A seeks to send a packet to station B, thefollowing flow occurs. Port 1 of SOC 10(1) receives the packet; ondestination lookup, the packet is switched to port 26 due to adestination hit; stack count is set to three. The packet is received onport 26 of switch SOC 10(2), and a source lookup results in a sourcelookup failure since the address station A had already been deleted fromthe ARL table. The source address is therefore learned, and added to theARL table of SOC 10(2). The stack count is decremented to two. Thedestination lookup results in a destination lookup failure, and thepacket is flooded to all ports of the associated VLAN on SOC 10(2). Thepacket is received on port 26 of SOC 10(3), where the stack count isdecremented to one, the destination lookup is a hit and the packet isswitched to port 1, where it is received by station B. The packet isthen forwarded on the stack link or interstack link to port 26 of SOC10(4), where the stack count is decremented to zero. Although thedestination lookup is a hit indicating that the packet should be sentout on port 26, the packet is dropped because the stack count is zero.

FIG. 26 illustrates packet flow in a simplex connection as shown in FIG.21, but where trunk groups are involved. In the example of FIG. 26, atrunk group is provided on SOC 10(3), which is an example where all ofthe members of the trunk group are disposed on the same module. In thisexample, station B on SOC 10(3) includes a trunk group of four ports.This example will assume that the TGID is two, and the RTAG is two forthe trunk port connecting station B. If station A is seeking to send apacket to station B, port 1 of SOC 10(1) receives the packet fromstation A. Assuming that all tables are empty, a source lookup failureoccurs, and the source address or MAC address of station A is learned onswitch 1. A destination lookup failure results, and the packet isflooded to all ports of the VLAN. As mentioned previously, of course,the appropriate interstack or IS tag is added on the ingress, and thestack count is set to three. The packet is received on port 26 of SOC10(2), and a source lookup failure occurs resulting in the sourceaddress of the packet from port 26 being learned. The stack count isdecremented to two. A destination lookup failure occurs, and the packetis sent to all ports of the VLAN on SOC 10(2). The packet is thenreceived on port 26 of switch SOC 10(3). A source lookup failure occurs,and the address is learned in the ARL table for switch SOC 10(3). Thestack count is decremented to one. On destination lookup, a destinationlookup failure occurs. A destination lookup failure on a switch havingtrunk ports, however, is not flooded to all trunk ports, but only senton a designated trunk port as specified in the 802.1Q table and in thePVLAN table, in addition to other ports which are members of theassociated VLAN. Station B then receives the packet. Since the stackcount is not yet zero, the packet is sent to SOC 10(4). A source lookupfailure occurs, the address is learned, the stack count is decrementedto zero, a destination lookup occurs which results in a failure. Thepacket is then flooded to all ports of the associated VLAN except thestack link port, thereby again preventing looping through the stack. Itshould be noted that, once the stack count has been decremented to zeroin any packet forwarding situation, if the destination lookup results ina hit, then the packet will be forwarded to the destination address. Ifa destination lookup failure occurs, then the packet will be forwardedto all ports on the associated VLAN except the stack link port, andexcept any trunk ports according to the 802.1Q table. If the destinationlookup results in the destination port being identified as the stackedlink port, then the packet is dropped since a complete loop would havealready been made through the stack, and the packet would have alreadybeen sent to the destination port.

For the situation where station B on the trunk port sends a packet tostation A, this example will presume that the packet arrives fromstation B on port 1 of SOC 10(3). The ingress submodule 14 of SOC 10(3)appends the appropriate IS tag. On address lookup, a source lookupfailure occurs and the source address is learned. Pertinent informationregarding the source address for the trunk configuration is port number,MAC address, VLAN ID, T bit status, TGID, and RTAG. Since the packetcoming in from station B is coming in on a trunk port, the T bit is setto 1, and the TGID and RTAG information is appropriately picked up fromthe PVLAN table. The stack count is set to three, and the ingress logicof SOC 10(3) performs a destination address lookup. This results in ahit in the ARL table, since address A has already been learned. Thepacket is switched to port 26 of SOC 10(3). The trunking rules are suchthat the packet is not sent to the same members of the trunk group fromwhich the packet originated. The IS tag, therefore, is such that theSRC_T bit is set, the SRC_TGID equals 2, and the SRC_RTAG equals 2. Thepacket is received on port 26 of SOC 10(4); a source lookup occurs,resulting in a source lookup failure. The source address of the packetis learned, and since the SRC_T bit is set, the TGID and the RTAGinformation is picked up from the interstack tag. The stack count isdecremented by one, and a destination lookup is performed. This resultsin an ARL hit, since address A has already been learned. The packet isswitched on port 26 of SOC 10(4). The packet is then received on port 26of switch SOC 10(1). A source lookup results in a source lookup failure,and the source address of the packet is learned. The TGID and RTAGinformation is also picked up from the interstack tag. The destinationlookup is a hit, and the packet is switched to port 1. Station Areceives the packet. The packet is also sent on the interstack link toSOC 10(2), since the stack count is not yet zero. The source address islearned on SOC 10(2) because of a source lookup failure, and althoughthe destination lookup results in a hit, the packet is not forwardedsince the stack count is decremented to zero in SOC 10(2). FIGS. 27A-27Dillustrate examples of the ARL table contents after this learningprocedure. FIG. 25A illustrates the ARL table information for SOC 10(1),FIG. 27B illustrates the ARL table information for SOC 10(2), FIG. 27Cillustrates the ARL table information for SOC 10(3) and FIG. 27Dillustrates the ARL table information for SOC 10(4). As discussedpreviously, the ARL table synchronization within each SOC 10 ensuresthat all of the ARL tables within a particular SOC 10 will contain thesame information.

After the addresses are learned, packets are handled without SLFs andDLFs unless aging or other phenomena results in address deletion. Theconfiguration of the trunk group will result in the DST_T bit being setin the IS tag for packets destined for a trunk port. The destinationTGID and destination RTAG data are picked up from the ARL table. Thesetting of the destination T bit (DST_T) will result in the TGID andRTAG information being picked up; if the DST_T bit is not set, then theTGID and RTAG fields are not important and are considered “don't care”fields.

FIG. 28 illustrates a configuration where trunk members are spreadacross several modules. FIG. 28 illustrates a configuration whereinstation A is on a trunk group having a TGID of 1 and an RTAG of 1.Station A on a trunk port on switch SOC 10(1) sends a packet to stationB on a trunk port in switch SOC 10(3). A packet is received from stationA on, for example, trunk port 1 of SOC 10. The IS tag is inserted intothe packet, a source lookup failure occurs, and the address of station Ais learned on SOC 10(1). In the ARL table for SOC 10(1), the MAC addressand VLAN ID are learned for station A, the T bit is set to one since thesource port is located on a trunk group. The stack count is set tothree, a destination lookup is performed, and a destination lookupfailure occurs. The packet is then “flooded” to all ports of theassociated VLAN. However, in order to avoid looping, the packet cannotbe sent out on the trunk ports. For this purpose, the TGID is veryimportant. The source TGID identifies the ports which are disabled withrespect to the packet being sent on all ports in the event of a DLF,multicast, unicast, etc., so that the port bitmap is properlyconfigured. The destination TGID gives you the trunk group identifier,and the destination RTAG gives you the index into the table to point tothe appropriate port which the packet goes out on. The T bit, TGID, andRTAG, therefore, control appropriate communication on the trunk port toprevent looping. The remainder of address learning in this configurationis similar to that which is previously described; however, the MACaddress A is learned on the trunk port. The above-described procedure ofone loop through the stack occurs, learning the source addresses,decrementing the stack count, and flooding to appropriate ports on DLFs,until the stack count becomes zero.

In a case where station A sends a packet to station B after theaddresses are learned, the packet is received from station A on thetrunk port, the source lookup indicates a hit, and the T bit is set.SRC_T bit is set, the TGID and RTAG for the source trunk port from theARL table is copied to the SRC_TGID and SRC_RTAG fields. In the insertedIS tag, the stack count is set to three. Destination lookup results in ahit, and the T bit is set for the destination address. The DST_T bit isset, and the TGID and RTAG for the destination trunk port for the ARLtable is copied to the DST_TGID and the DST_RTAG. Port selection isperformed based upon the DST_TGID and DST_RTAG. In this example, portselection in SOC 10(1) indicates the stack link port of SOC 10(2) isport 26. The packet is sent on port 26 to SOC 10(2). Since the DST_T bitis set, the TGID and RTAG information is used to select the trunk port.In this example, the packet is sent to port 26. The packet is thenreceived on port 26 of SOC 10(3). In this case, the DST_T bit, TGID, andRTAG information are used to select the trunk port which, in FIG. 26, isport 1. In each hop, of course, the stack count is decremented. At thispoint, the stack count is currently one, so the packet is sent to SOC10(4). The packet is not forwarded from SOC 10(4), however, sincedecrementing the stack count results in the stack count being zero.

Stack Management

FIG. 29 illustrates a configuration of stack 2000 wherein a plurality ofCPUs 52(1) . . . 52(4) which work in conjunction with SOC 10(1), 10(2),10(3), and 10(4), respectively. The configuration in this example issuch that CPU 52(1) is a central CPU for controlling a protocol stackfor the entire system. This configuration is such that there is only oneIP address for the entire system. The configuration of which SOC 10 isdirectly connected to the central CPU is determined when the stack isconfigured. The configuration of FIG. 29 becomes important for handlingunique protocols such as simple network management protocol (SNMP). Anexample of an SNMP request may be for station D, located on a port ofSOC 10(3), to obtain information regarding a counter value on SOC 10(4).To enable such inquiries, the MAC address for SOC 10(1), containingcentral CPU 52(1), is programmed in all ARL tables such that any packetwith that destination MAC address is sent to SOC 10(1). The request isreceived on SOC 10(3). The ingress logic for SOC 10(3) will send thepacket to SOC 10(1), by sending the packet first over stack link orinterstack link 2003 to SOC 10(4), which then sends the packet overinterstack link 2004 to reach SOC 10(1). Upon receipt, the packet willbe read and passed to central CPU 52(1), which will process the SNMPrequest. When processing the request, central CPU 52(1) will determinethat the request requires data from switch SOC 10(4). SOC 10(1) thensends a control message to SOC 10(4), using SOC 10(4)'s MAC address, toread the counter value. The counter value is read, and a control messagereply is sent back to SOC 10(1), using SOC 10(1)'s MAC address. AfterSOC 10(1) receives the response, an SNMP response is generated and sentto station D.

Port Mirroring

In certain situations, a network administrator or responsible individualmay determine that certain types of packets or certain ports will bedesignated such that copies of packets are sent to a designated“mirrored to” port. The mirrored-to designation is identified in theaddress resolution process by the setting of the M bit in the interstacktag. If the M bit is set, the module ID is picked up from the portmirroring register in the ARL table, and the module ID is made part ofthe interstack tag. The port mirroring register contains a six bit fieldfor the mirrored-to port. The field represents the port number on whichthe packet is to be sent for mirroring. If the port number is a stacklink or interstack link port, then the mirrored-to port is located onanother module. If the port number is other than the stack link, thenthe mirrored-to port is on the local module. When a packet is sent onthe stack link with the M bit set and the MD bit set, the appropriatemodule will receive the packet and send the packet to the mirrored-toport within that module which is picked from the port mirroring registerof that module. The packet is not sent to the destination port. If the Mbit is set and the MD bit is not set, then the packet is sent to themirrored-to port as well as the destination port.

Full Duplex

Reference will now be made to FIG. 30. This figure will be used toillustrate packet flow among switches on the duplex-configured stackarrangements illustrated in FIGS. 22 and 23. As mentioned previously,the configurations of FIG. 22 and FIG. 23 both provide full duplexcommunication. The configuration of Figure of 23, however, utilizes theremaining gigabit uplinks to provide a level of redundancy and faulttolerance. In practice, however, the configuration of FIG. 22 may bemore practical. In properly functioning duplex configured stacks,however, packet flow and address learning are essentially the same forboth configurations.

Duplex stack 2100 includes, in this example, four switches such as SOC10(1) . . . SOC 10(4). Instead of 4 unidirectional interstack links,however, bi-directional links 2101, 2102, and 2103 enable bi-directionalcommunication between each of the switches. This configuration requiresthat each of the ports associated with the interstack links are locatedon the same VLAN. If a plurality of VLANs are supported by the stack,then all of the ports must be members of all of the VLANs. The duplexconfiguration enables SOC 10(2), as an example to be able to communicatewith SOC 10(1) with one hop upward, rather than three hops downward,which is what would be required in the unidirectional simplexconfiguration. SOC 10(4), however, will require 3 hops upward tocommunicate with SOC 10(1), since there is no direct connection ineither direction. It should be noted that upward and downward are usedherein as relative terms with respect to the figures, but in actualpractice are only logical hops rather than physical hops. Because of themulti-directional capabilities, and because port bitmaps preventoutgoing packets from being sent on the same ports upon which they camein, the stack count portion of the interstack tag is not utilized.

The following discussion will be directed to packet flow in a situationwhere station A, located on port 1 of SOC 10(1) in FIG. 30, seeks tosend a packet to station B, located on port 1 of SOC 10(3). The packetcomes in to ingress 14 of SOC 10(1); an interstack tag is inserted intothe packet. Since all of the tables are initially empty, a source lookupfailure will occur, and the address of station A is learned on theappropriate ARL table of SOC 10(1). A destination lookup failure willoccur, and the packet will be sent to all ports of the associated VLAN.In the configuration of FIG. 30, therefore, the packet will be sent oninterstack link 2101 from port 25 of SOC 10(1) to port 26 of SOC 10(2).A source lookup failure occurs, and the source address is learned on SOC10(2). A destination lookup failure occurs, and the packet is sent onall ports of the associated VLAN. The switches are configured such thatthe port bitmaps for DLFs do not allow the packet to be sent out on thesame port on which it came in. This would include port 25 of switch SOC10(2), but not port 26 of SOC 10(2). The packet will be sent to port 26of switch SOC 10(3) from port 25 of SOC 10(2). A source lookup failurewill occur, the address for station A will be learned in the ARL tableof SOC 10(3). A destination lookup failure will also occur, and thepacket will be sent on all ports except port 26. Station B, therefore,will receive the packet, as will SOC 10(4). In SOC 10(4), the addressfor station A will be learned, a destination lookup failure will occur,and the packet will be sent to all ports except port 26. Since SOC 10(4)has no direct connection to SOC 10(1), there is no issue of loopingthrough the stack, and there is no need for the stack count field to beutilized in the IS tag.

In the reverse situation when station B seeks to send a packet tostation A in the configuration of FIG. 30, address learning occurs in amanner similar to that which was discussed previously. Since the addressfor station B has not yet been learned, an SLF occurs, and station B islearned on SOC 10(3). A destination lookup, however, results in a hit,and the packet is switched to port 26. The packet comes in to port 25 ofSOC 10(2), a source lookup failure occurs, the address of station B islearned, and destination lookup occurs. The destination lookup resultsin a hit, the packet is switched to port 26 of SOC 10(2), and into port25 of SOC 10(1). A source lookup failure occurs, the address for stationB is learned on SOC 10(1), a destination lookup is a hit, and the packetis switched to port 1 of SOC 10(1). Since there was no destinationlookup failure when the packet came in to switch SOC 10(3), the packetwas never sent to SOC 10(4). In communication between stations A and B,therefore, it is possible that the address for station B would never belearned on switch SOC 10(4). In a situation where station B were to senda packet to a station on SOC 10(4), there would be no source lookupfailure (assuming station B had already been learned on SOC 10(3)), buta destination lookup failure would occur. The packet would then be sentto port 26 of SOC 10(4) on port 25 of SOC 10(3), and also to port 25 ofSOC 10(2) on port 26 of SOC 10(3). There would be no source lookupfailure, but there would be a destination lookup failure in SOC 10(4),resulting in the flooding of the packet to all ports of the VLAN exceptport 26. Addresses may therefore become learned at modules which are notintended to receive the packet. The address aging process, however, willfunction to delete addresses which are not being used in particulartables. The table synchronization process will ensure that ARL tableswithin any SOC 10 are synchronized.

Full Duplex Trunking

Trunking in the full duplex configuration is handled in a manner whichis similar to the simplex configuration. T bit, TGID, and RTAGinformation is learned and stored in the tables in order to controlaccess to the trunk port.

FIG. 31 illustrates a configuration where station A is disposed on port1 of SOC 10(1) and station B is disposed on a trunk port of SOC 10(3).In this stacking configuration referred to as stack 2200, all members ofthe trunk group are disposed on SOC 10(3).

In this example, the TGID for the trunk port connecting station B to SOC10(3) will be two, and the RTAG will also be two. In an example wherestation A seeks to send a packet to station B, the packet is received atport 1 of SOC 10(1). A source lookup failure occurs, and the sourceaddress of the packet form port 1 is learned in the ARL table for SOC10(1). The ARL table, therefore, will include the port number, the MACaddress, the VLAN ID, T bit information, TGID information, and RTAGinformation. The port number is 1, the MAC address is A, the VLAN ID is1, the T bit is not set, and the TGID and RTAG fields are “don't care”.A destination lookup results in a destination lookup failure, and thepacket is flooded to all ports on the associated VLAN except, of course,port 1 since that is the port on which the packet came in. The packet,therefore, is sent out on at least port 25 of SOC 10(1). The packet isreceived on port 26 of SOC 10(2). A source lookup failure results in theARL table learning the address information. As with other lookups, thesource address of the packet coming from SOC 10(1) to SOC 10(2) wouldindicate the source port as being port 26. A DLF occurs, and the packetis sent to all ports on the associated VLAN except port 26 of SOC 10(2).The packet is received on port 26 of SOC 10(3), a source lookup occurs,a source lookup failure occurs, and the source address of the packetcoming in on port 26 is learned. A destination lookup results in adestination lookup failure in SOC 10(3). The packet is flooded on allports of the associated VLAN of SOC 10(3) except port 26. However, a DLFon the trunk port is sent only on a designated port as specified in the802.1Q table and the PVLAN table for SOC 10(3). The 802.1Q table is thetagged VLAN table, and contains the VLAN ID, VLAN port bit map, anduntagged bit map fields. Destination B then receives the packet throughthe trunk port, and SOC 10(4) also receives the packet on port 26. InSOC 10(4), a source lookup failure occurs, and the source address of thepacket is learned. On destination lookup, a DLF occurs, and the packetis flooded to all ports of the VLAN on switch SOC 10(4), except ofcourse port 26.

In the reverse situation, however, the T bit, TGID, and RTAG valuesbecome critical. When station B seeks to send a packet to station A, apacket comes in on the trunk port on SOC 10(3). A source lookup resultsin a source lookup failure, since the address for station B has not yetbeen learned. The T bit is set since the source port is on a trunkgroup, and the TGID and RTAG information is picked up from the PVLANtable. The ARL table for SOC 10(3), therefore, contains the informationfor station A, and now also contains the address information for stationB. In the station B entry, the port number is indicated as 1, the VLANID is 1, the T bit is set, and the TGID and RTAG information are eachset to two. SOC 10(3) then performs a destination lookup, resulting inan ARL hit, since station A has already been learned. The packet isswitched to port 26 of SOC 10(3). The packet is not sent to the samemembers of the trunk group from which the packet originated. In theinterstack tag, the SRC_T bit is set, the TGID is set to equal 2, andthe RTAG is set to equal 2. The packet is received on port 25 of SOC10(2), where the ingress performs a source lookup. A source lookupfailure occurs, and the source address of the packet from port 25 islearned. The SRC_T bit, the TGID information, and the RTAG informationin this case is picked up from the interstack tag. On destinationlookup, an ARL hit occurs, and the packet is switched to port 26 of SOC10(2), and it is then received on port 25 of SOC 10(1). A source lookupresults in a source lookup failure, and the address of the incomingpacket is learned. The destination lookup is a hit, and the packet isswitched to port 1 where it is then received by station A.

After this learning and exchange process between station A and station Bfor the configuration of FIG. 30, the ARL tables for SOC 10(1), 10(2),10(3), and 10(4) will appear as shown in FIGS. 32A, 32B, 32C, and 32D,respectively. It can be seen that the address for station B is notlearned in SOC 10(4), and is therefore not contained in the table ofFIG. 32D, since the packet from station B has not been sent to any portson SOC 10(4).

FIG. 33 illustrates a configuration where members of trunk groups are indifferent modules. In this configuration, address learning and packetflow is similar to that which is discussed with respect to FIG. 31. Inthis configuration, however, the MAC address for station A must also belearned as a trunk port. In a situation where the TGID equals 1 and theRTAG equals 1 for the trunk group connecting station A in SOC 10(1), andwhere the TGID and RTAG equals 2 for the trunk group connecting stationB in SOC 10(3), address learning for station A sending a packet tostation B and station B sending a packet to station A would result inthe ARL tables for SOC 10(1), 10(2), 10(3) and 10(4) containing theinformation set forth in FIGS. 34A, 34B, 34C, and 34D, respectively. Forthe situation where station A on SOC 10(1) is sending a packet tostation B on SOC 10(2), after addresses have been learned as illustratedin FIGS. 34A-34D, the following flow occurs. The incoming packet isreceived from station A on the trunk port, which we will, in thisexample, consider to be port number 1. Source lookup indicates a hit,and the T bit is set. In the interstack tag, the SRC_T bit is set, theTGID, and RTAG for the source trunk port from the ARL table is copied tothe SRC_TGID and SRC_RTAG fields in the IS tag. Destination lookupindicates a hit, and the T bit is set for the destination address. TheDST_T bit is set, and the TGID and RTAG information for the destinationtrunk port from the ARL table is copied to the DST_TGID and DST_RTAGfields. Port selection is performed, according to the DST_RTAG. In thisexample, the packet is sent to SOC 10(2). If no port is selected, thenthe packet is sent to SOC 10(3) on port 25 of SOC 10(2). The packet isthen received on port 26 of SOC 10(3). Destination lookup in the ARLtable is a hit, and port selection is performed according to theDST_RTAG field. Once again, SOC 10(4) is not involved since no DLF hasoccurred.

It will be understood that, as discussed above with respect to thestand-alone SOC 10, the trunk group tables must be properly initializedin all modules in order to enable appropriate trunking across the stack.The initialization is performed at the time that the stack is configuredsuch that the packet goes out on the correct trunk port. If a trunkmember is not present in a switch module, the packet will go out on theappropriate interstack link.

In order for proper handling of trunk groups to occur, the trunk grouptable in each SOC 10 must be appropriately initialized in order toenable proper trunking across the stack. FIG. 36 illustrates an exampleof the trunk group table initializations for the trunk configurationillustrated in FIG. 31, wherein members of the trunk group are in thesame module. FIG. 37 illustrates an example of trunk group tableinitializations for the trunk group configuration of FIG. 33, whereinmembers of the trunk group are in different switches. FIG. 36 onlyillustrates initialization for a situation where the TGID equals 2. Forsituations where the TGID equals 1, the trunk port selection wouldindicate the stack link port in the correct direction. FIG. 37, however,illustrates the trunk group table initializations for a TGID of 1 and 2.If a trunk member is not present in a particular switch module, thepacket will be sent out on the stack link port.

Layer 3 Switching

The above discussion regarding packet flow is directed solely tosituations where the source and destination are disposed within the sameVLAN. For situations where the VLAN boundaries must be crossed, layer 3switching is implemented. With reference to FIG. 35, layer 3 switchingwill now be discussed. In this example, suppose that station A, locatedon port 1 of SOC 10(1) is on a VLAN V1 having a VLAN ID of 1, andstation B, located on port 1 of SOC 10(3) is located on another VLAN V3having a VLAN ID of 3. Since multiple VLANs are involved, the portsconnecting the interstack links must be members of both VLANs.Therefore, ports 25 and 26 of SOC 10(1), 10(2), 10(3), and 10(4) haveVLAN IDs of 1 and 3, thereby being members of VLAN V1 and VLAN V3. Layer3 switching involves crossing the VLAN boundaries within the module,followed by bridging across the module. Layer 3 interfaces are notinherently associated with a physical port, as explained previously, butare associated instead with the VLANs. If station A seeks to send apacket to station B in the configuration illustrated in FIG. 35, thepacket would be received at port 1 of SOC 10(1), and be addressed torouter interface R1, with the IP destination address of B. Router R1 is,in this example, designated as the router interface between VLANboundaries for VLAN V1 and VLAN V3. Since SOC 10(1) is configured suchthat VLAN V3 is located on port 25, the packet is routed to VLAN V3through port 25. The next hop MAC address is inserted in the destinationaddress field of the MAC address. The packet is then switched to port 26of SOC 10(2), in a layer 2 switching operation. The packet is thenswitched to port 25 of SOC 10(2), where it is communicated to port 26 ofSOC 10(3). SOC 10(3) switches the packet to port 1, which is the portnumber associated with station B. In more specific detail, the layer 3switching when a packet from station A is received at ingress submodule14 of SOC 10(1), the ARL table is searched with the destination MACaddress. If the destination MAC address is associated with a layer 3interface, which in this case would be a VLAN boundary, the ingress willthen check to see if the packet is an IP packet. If it is not an IPpacket, the packet is sent to the appropriate CPU 52 for routing.Similarly, if the packet has option fields, the packet is also sent toCPU 52 for routing. The ingress also checks to see if the packet is amulticast IP packet, also referred to as a class D packet. If this isthe case, then the packet is sent to the CPU for further processing.After the IP checksum is validated, the layer 3 table is searched withthe destination IP address as the key. If the entry is found in the ARLtable, then the entry will contain the next hop MAC address, and theegress port on which this packet must be forwarded. In the case of FIG.35, the packet would need to be forwarded to port 25. If the entry isnot found in the layer 3 table, then a search of a default router suchas a default IP router table is performed. If the entry is not found,then the packet is sent to the CPU. By ANDing the destination IP addresswith a netmask in the entry, and checking to see if there is a matchwith the IP address in the entry, the default router table is searched.The packet is then moved through the stack with the IS tag appropriatelyconfigured, until it is switched to port 1 of SOC 10(3). It is thenchecked to determine whether or not the packet should go out as tag oruntagged. Depending upon this information, the tagging fields may or maynot be removed. The interstack tag, however, is removed by theappropriate egress 16 before the packet leaves the stack.

In the above-described configurations of the invention, the addresslookups, trunk group indexing, etc. result in the creation of a port bitmap which is associated with the particular packet, therefore indicatingwhich ports of the particular SOC 10 the packet will be sent out on. Thegeneration of the port bitmap, for example, will ensure that DLFs willnot result in the packet being sent out on the same port on which itcame in which is necessary to prevent looping throughout a network andlooping throughout a stack. It should also be noted that, as mentionedpreviously, each SOC 10 can be configured on a single semiconductorsubstrate, with all of the various tables being configured astwo-dimensional arrays, and the modules and control circuitry being aselected configuration of transistors to implement the necessary logic.

In order for the various parameters of each SOC 10 to be properlyconfigurable, each SOC 10 must be provided with a configuration registerin order to enable appropriate port configuration. The configurationregister includes a field for various parameters associated withstacking. For example, the configuration register must include a moduleID field, so that the module ID for the particular SOC 10 switch can beconfigured. Additionally, the configuration register must include afield which can programmed to indicate the number of modules in thestack. It is necessary for the number of modules to be known so that thestack count field in the interstack tag can be appropriately set to n−1.The configuration register must also include a field which will indicatewhether or not the gigabit port of a particular GPIC 30 is used as astacking link or an uplink. A simplex/duplex field is necessary, so thatit can be indicated whether or not the stacking solution is a simplexconfiguration according to FIG. 21, or a duplex configuration accordingto FIGS. 22 and 23. Another field in the configuration register shouldbe a stacking module field, so that it can properly be indicated whetherthe particular SOC 10 is used in a stack, or in a stand aloneconfiguration. SOC 10 switches which are used in a stand aloneconfiguration, of course, will not insert an IS tag into incomingpackets. The configuration register is appropriately disposed to beconfigured by CPU 52.

Additionally, although not illustrated with respect to the stackingconfigurations, each SOC 10 is configured to have on-chip CBP 50, andalso off-chip GBP 60, as mentioned previously. Admission to eitheron-chip memory or off-chip memory is performed in the same manner ineach chip, as is communication via the CPS channel 80.

Referring to FIG. 38, CMIC 40 acts as a system memory interface for CPU52. When conducting DMA operations, CPU 52 or CMIC 40 seeks to directlycommunicate with system memory 54. DMA information handling iscontrolled by a series of “descriptors”, which typically contain CRCinformation, address and length, and other information regarding thedata being transferred. Once a DMA operation is initiated, thedescriptors are usually handled in sequence in a high performancemanner. CMIC 40, therefore, will typically fetch the next sequentialdescriptor which is a predetermined offset from the start of theprevious descriptor address. Descriptors are typically of a fixedlength, such as 24 bytes, but can be of any length. By sequentiallyarranging the descriptors, with the first descriptor beginning, forexample, at 0 and ending, for example, at location 24, then with thesecond descriptor beginning at 25, and ending at 48, processing of thedescriptors can be very efficient. However, since sequentiallyconfigured descriptors must be placed in a fixed location, a largeamount of memory must be set aside for the descriptors, and this memorymay not all be effectively used. On the other hand, if an insufficientamount of memory is set aside, there may not be enough room for thedescriptors. A sequential list of descriptors is illustrated in FIG. 39,wherein descriptors D1, D2 and D3 are sequentially configured withinmemory 54.

The limitations of sequential descriptors can be overcome by utilizing alast address in a descriptor as a pointer to a next address for the nextdescriptor. This way, it is not necessary to have descriptors sequentialor to even have the descriptors located in a same general area ofmemory. The pointer in the first descriptor will point to an address ofthe next descriptor, so the device seeking to access the descriptor suchas CMIC 40 would look at this pointer, and then go to the addressidentified in the pointer to find the next descriptor. Thisconfiguration provides a significant amount of flexibility since thedescriptors can be located anywhere in memory. Unfortunately, however,the utilization of these pointers involves a significant amount ofsystem overhead, since the address of the pointer must be read, and thenthe address which is pointed to, for the next descriptor, must be read.

The present invention, therefore, seeks to capitalize on the high speedand high performance which is provided by the sequential descriptorsillustrated in FIG. 39 and the pointer configuration discussed above.The invention utilizes a new field in the DMA descriptor which isreferred to as a reload field or reload bit. When this reload bit is notset, CMIC 40 or any other device involved in the DMA will presume thatthe next descriptor will be at the next sequential offset location, asillustrated in FIG. 39. However, if the reload bit is set, then thedevice is configured to automatically look at memory offset 0, in orderto determine the physical memory address where the next descriptor islocated. This offset, therefore, can act as the pointer mentioned above.The present invention, therefore, provides the speed and efficiency ofthe sequential descriptor configuration, and also provides theflexibility which is provided by the pointer configuration.

In other words, CMIC 40 will typically always fetch the next sequentialdescriptor at a predetermined offset from the start of the previousdescriptor address. The reload bit will allow a next descriptor to befetched from a non-sequential descriptor memory address. When the reloadbit is set, CMIC 40 will process the next descriptor from the addressspecific in the descriptor. In one particular implementation, a chainbit or C bit is used to determine if there is, in fact, a nextdescriptor. If the chain bit is not set, it is determined that thedescriptor which is being read is the end of the chain, and CMIC 40 willnot access either a next sequential descriptor or any other memorylocations for a next descriptor.

Referring to FIG. 40, descriptor D4 is located, for example, at memorylocation X. In descriptor D4, the chain bit is set to 1, indicating thatthere is a next descriptor, and the reload bit is set to 0, indicatingthat the next descriptor is in the next sequential memory location. Thenext descriptor, descriptor D5, is such that the chain bit is set to 1,indicating that it is not a last descriptor, and the reload bit is alsoset to 1. CMIC 40 or the device involved in the DMA will therefore lookat the first memory location in the descriptor offset to identify thememory location for the next descriptor. In this example, descriptor D6is indicated in descriptor D5 as being located at memory location A1.Since descriptor D6 has the chain bit set to 1 and the reload bit set to0, the DMA operation presumes that the next descriptor is located at thememory offset which is immediately adjacent to descriptor D6. DescriptorD7 has the chain bit set to 0 and the reload bit set to 0, indicatingthat this is the last descriptor in the chain.

An example of descriptor contents according to the present invention,therefore, might be as follows, given 32-bit offsets:

-   -   Offset 0: this offset contains the physical memory address where        data should be transferred to or read from, in the event that        the reload bit is not set. If the reload bit is set, this offset        becomes a pointer, as mentioned above.    -   Offset 1: can contain a significant amount of important        information regarding descriptor operations. The specific        contents of offset 1 could be as follows:        -   Bit 31: chain bit or C bit; if this bit is set to 1, the            next descriptor is valid. If this bit is set to 0, this is            the last valid descriptor in the chain.        -   Bits 30:28 are bits which contain information regarding the            COS value of the descriptor.        -   Bit 27 is the J bit; if this bit is set to 1, then the            descriptor is considered to be jumbo, and therefore be            associated with an oversized data field.        -   Bits 26:25 are CRC bits, used for CRC error correction.        -   Bits 24:23 are 0 bits. It should be noted that the J bit,            the CRC bits, and the 0 bits are only used when transferring            data from memory to the CP channel.        -   Bits 22:19 are bits which are reserved for IP/IPX            information.        -   Bit 18 is the SG bit.        -   Bit 17 is the RLD or reload bit. If this bit is set to 0,            the next descriptor will be fetched sequentially. If this            bit is set to 1, CMIC 40 will look to offset 0 in order to            determine the 32 bit memory address for the next descriptor.        -   Bits 16:0 contain the byte count.    -   Offset 2 contains the 32-bit port bit map. This offset,        therefore, indicates to CMIC 40 the potential ports of SOC 10        which should receive the data from this descriptor operation.        The actual port bit map is computed by CMIC 40 based upon COS        queue availability, HOL blocking information, and other switch        parameters.    -   Offset 3 contains a 32-bit untag bit map, which is used during        transfers to the CP channel.    -   Offset 4 is the status offset, which can be updated by CMIC 40        to indicate whether the descriptor execution is completed, and        to indicate the number of bytes transferred. When receiving data        from the CP channel, the status register is also updated with        COS, E-bit, J bit, CRC bits, and S-bit, as received by CMIC 40        from CPS channel 80.    -   Offset 5 can be, for example, an additional status offset.

The present invention, as stated previously, enables DMA operations tooccur with the speed and efficiency of the sequential descriptorconfiguration illustrated in FIG. 39, yet allows the flexibilityassociated with the pointer style descriptor configuration. Theadvantage is a highly flexible DMA descriptor configuration, whichutilizes a chain bit and a reload bit to indicate the characteristics ofa present descriptor, and a location of a subsequent descriptor.

Although the invention has been described based upon these preferredembodiments, it would be apparent to those of skilled in the art thatcertain modifications, variations, and alternative constructions wouldbe apparent, while remaining within the spirit and scope of theinvention. For example, the specific configurations of packet flow arediscussed with respect to a switch configuration such as that of SOC 10.It should be noted, however, that other switch configurations could beused to take advantage of the invention. In order to determine the metesand bounds of the invention, therefore, reference should be made to theappended claims.

1. A method, comprising: receiving, by a processor, a first directmemory access DMA descriptor, including both a pointer field, and areload bit, from a first location in a memory; transferring data basedon the first DMA descriptor; reading a second DMA descriptor from asecond location in the memory sequential to the first location in thememory of the first DMA descriptor with a predetermined offset inresponse to the reload bit included in the first DMA descriptor beingset to a first value; and reading a third DMA descriptor from a thirdlocation in the memory specified within the second DMA descriptor andnon-sequential to the first location in the memory and non-sequential tothe second location in the memory in response to a reload bit includedin the second DMA descriptor being set to a second value.
 2. The methodof claim 1, wherein: the first DMA descriptor includes a chain field,and the reading the second DMA descriptor, based on the reload bit beingset to the first value, includes reading the second DMA descriptor basedon the chain field indicating that the descriptor is not a lastdescriptor in a chain of descriptors.
 3. A method of claim 1, whereinthe first DMA descriptor further includes a port bit map indicatingpotential ports which configured to receive data from an operationassociated with the first DMA descriptor.
 4. The method of claim 1,wherein the first DMA descriptor further includes a Cyclic RedundancyCheck (CRC) field.
 5. The method of claim 1, wherein the second locationin memory of the second DMA descriptor sequential to the first DMAdescriptor is the predetermined offset from a start of an address of thefirst DMA descriptor.
 6. The method of claim 1, wherein the first DMAdescriptor includes a class of service (COS) field indicating a COS ofthe first DMA descriptor.
 7. A method comprising: receiving, by aprocessor, a first direct memory access (DMA) descriptor including apointer field and a reload field, from a first location in a memory;reading a second DMA descriptor from a second location in the memorysequential to the first location in the memory of the first DMAdescriptor with a predetermined offset in response to the reload fieldincluded in the first DMA descriptor being set to a first value; andreading a third DMA descriptor from a third location in the memoryspecified within a pointer field included in the second DMA descriptorin response to a reload field included in the second DMA descriptorbeing set to a second value non-sequential to the first location in thememory and non-sequential to the second location in the memory inresponse to a reload bit included in the second DMA descriptor being setto a second value.
 8. The method of claim 7, wherein: the DMA descriptorincludes a chain field, and the reading the second DMA descriptor, basedon the reload field being set to the first value, includes reading thesecond DMA descriptor based on the chain field indicating that thedescriptor is not a last descriptor in a chain of descriptors.
 9. Themethod of claim 7, wherein the first DMA descriptor further includes aport bit map indicating potential ports configured to receive data froman operation associated with the first DMA descriptor.
 10. The method ofclaim 7, wherein the first DMA descriptor further includes a CyclicRedundancy Check (CRC) field.
 11. The method of claim 7, wherein thesecond location in memory of the second DMA descriptor sequential to thefirst DMA descriptor is the predetermined offset from a start of anaddress of the first DMA descriptor.
 12. The method of claim 7, whereinthe first DMA descriptor includes a class of service (COS) fieldindicating a COS of the first DMA descriptor.
 13. An apparatus,comprising: a CPU Management Interface Controller (CMIC), the CMICconfigured to: receive a first DMA descriptor, including a pointer fieldand a reload field; read a second DMA descriptor from a first locationin memory sequential to the first location in the memory of the firstDMA descriptor with a predetermined offset in response to the reloadfield included in the first DMA descriptor being set to a first value;and read a third DMA descriptor from a third location in the memoryspecified within a pointer field included in the second DMA descriptorin response to a reload field included in the second DMA descriptorbeing set to a second value non-sequential to the first location in thememory and non-sequential to the second location in the memory inresponse to a reload bit included in the second DMA descriptor being setto a second value.
 14. The apparatus of claim 13, wherein: the first DMAdescriptor includes a chain field, and the CMIC is configured to readthe second DMA descriptor based on the chain field indicating that thedescriptor is not a last descriptor in a chain of descriptors, whetherthe reload field of the first DMA descriptor is set to either the firstvalue or the second value.
 15. The apparatus of claim 13, wherein thefirst DMA descriptor further includes a port bit map indicatingpotential ports configured to receive data from an operation associatedwith the first DMA descriptor.
 16. The apparatus of claim 13, whereinthe first DMA descriptor further includes a Cyclic Redundancy Check(CRC) field.
 17. The apparatus of claim 13, wherein the second locationin the memory of the second DMA descriptor sequential to the first DMAdescriptor is the predetermined offset from a start of an address of thefirst DMA descriptor.
 18. The apparatus of claim 13, wherein the firstDMA descriptor includes a class of service (COS) field indicating a COSof the first DMA descriptor.